|
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 19
|
||||||
PostgreSQL и CLion, ошибка при компиляции undefined reference27.10.2015, 00:14. Показов 11985. Ответов 40
Господа знатоки, который день мучаюсь с одной проблемой
Изучаю PostgreSQL. Возникла потребность в управлении базой через C++. Узнал, что есть библиотека libpq специально для этих целей. Она стандартная для postgres'а и лежит в его корневой папке. Проблема возникла при подключении этой библиотеки. Дело в том, что я пишу в CLion 1.1.1, который, в свою очередь, использует CMake. Стало быть, чтобы подключить постгрес я должен прописать команды подключения в makefile'е. У CMake есть стандартное средство для поиска Postgres'а и его библиотек. Мне остаётся лишь вызвать это средство. Поддержка JetBrains "помогла" мне в этом вопросе и выяснилось, что makefile в самом простом случае должен выглядеть так: cmake_minimum_required(VERSION 3.3) project(testSQL2) find_package(PostgreSQL REQUIRED) include_directories (${PostgreSQL_INCLUDE_DIR}) set(SOURCES main.cpp) add_executable(testSQL2 ${SOURCES}) target_link_libraries(testSQL2 libpq) Собственно, я создал тестовый проект, где файл так и выглядит. Вот, что содержит main.cpp:
C:/Users/qem-1/ClionProjects/testSQL2/main.cpp:5: undefined reference to `PQconnectdb' Как будто он не видит самую реализацию функции Примечательно также то, что во вкладке Cache CMake'а я вижу абсолютно правильно определённые директории расположения Postgres'а: PostgreSQL_INCLUDE_DIR C:/PostgreSQL/include PostgreSQL_LIBRARY C:/PostgreSQL/lib PostgreSQL_TYPE_INCLUDE_DIR C:/PostgreSQL/include/server Тех.поддержка JetBrains разводит руками и, вроде как, не сможет мне помочь. Так что же всё таки надо сделать, чтобы скомпилировать такой проект и начать работать? Windows 10 x64, CLion 1.1.1, MinGW 3.21, PostgreSQL 9.4
0
|
||||||
| 27.10.2015, 00:14 | |
|
Ответы с готовыми решениями:
40
Ошибка при компиляции undefined reference to `List<int>::List()'| Ошибка компиляции единого файла: undefined reference to `vtable for .' При компиляции Dev-C ошибки: undefined reference to |
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|
| 27.10.2015, 09:26 | |
|
QEM, вот этот файлик прикрепи еще: @CMakeFiles\TestSQL4.dir\linklibs.rsp
0
|
|
|
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 19
|
|
| 27.10.2015, 09:27 [ТС] | |
|
DrOffset, Содержимое Cmakelists:
set(CMAKE_VERBOSE_MAKEFILE true) cmake_minimum_required(VERSION 3.3) project(TestSQL4) find_package(PostgreSQL REQUIRED) include_directories (${PostgreSQL_INCLUDE_DIRS}) set(SOURCES main.cpp) add_executable(TestSQL4 ${SOURCES}) target_link_libraries(TestSQL4 ${PostgreSQL_LIBRARIES}) Лог компиляции: C:\CLion_1.1.1\bin\cmake\bin\cmake.exe --build C:\Users\qem-1\.clion11\system\cmake\generated\e98d45 93\e98d4593\Debug --target TestSQL4 -- -j 4 C:\CLion_1.1.1\bin\cmake\bin\cmake.exe -HC:\Users\qem-1\ClionProjects\TestSQL4 -BC:\Users\qem-1\.clion11\system\cmake\generated\e98d45 93\e98d4593\Debug --check-build-system CMakeFiles\Makefile.cmake 0 C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\Makefile2 TestSQL4 mingw32-make.exe[1]: Entering directory 'C:/Users/qem-1/.clion11/system/cmake/generated/e98d4593/e98d4593/Debug' C:\CLion_1.1.1\bin\cmake\bin\cmake.exe -HC:\Users\qem-1\ClionProjects\TestSQL4 -BC:\Users\qem-1\.clion11\system\cmake\generated\e98d45 93\e98d4593\Debug --check-build-system CMakeFiles\Makefile.cmake 0 C:\CLion_1.1.1\bin\cmake\bin\cmake.exe -E cmake_progress_start C:\Users\qem-1\.clion11\system\cmake\generated\e98d45 93\e98d4593\Debug\CMakeFiles 2 C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\Makefile2 CMakeFiles/TestSQL4.dir/all mingw32-make.exe[2]: Entering directory 'C:/Users/qem-1/.clion11/system/cmake/generated/e98d4593/e98d4593/Debug' C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\TestSQL4.dir\build.make CMakeFiles/TestSQL4.dir/depend mingw32-make.exe[3]: Entering directory 'C:/Users/qem-1/.clion11/system/cmake/generated/e98d4593/e98d4593/Debug' C:\CLion_1.1.1\bin\cmake\bin\cmake.exe -E cmake_depends "MinGW Makefiles" C:\Users\qem-1\ClionProjects\TestSQL4 C:\Users\qem-1\ClionProjects\TestSQL4 C:\Users\qem-1\.clion11\system\cmake\generated\e98d45 93\e98d4593\Debug C:\Users\qem-1\.clion11\system\cmake\generated\e98d45 93\e98d4593\Debug C:\Users\qem-1\.clion11\system\cmake\generated\e98d45 93\e98d4593\Debug\CMakeFiles\TestSQL4.di r\DependInfo.cmake --color= mingw32-make.exe[3]: Leaving directory 'C:/Users/qem-1/.clion11/system/cmake/generated/e98d4593/e98d4593/Debug' C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\TestSQL4.dir\build.make CMakeFiles/TestSQL4.dir/build mingw32-make.exe[3]: Entering directory 'C:/Users/qem-1/.clion11/system/cmake/generated/e98d4593/e98d4593/Debug' [ 50%] Linking CXX executable TestSQL4.exe C:\CLion_1.1.1\bin\cmake\bin\cmake.exe -E cmake_link_script CMakeFiles\TestSQL4.dir\link.txt --verbose=1 C:\CLion_1.1.1\bin\cmake\bin\cmake.exe -E remove -f CMakeFiles\TestSQL4.dir/objects.a C:\MinGW\bin\ar.exe cr CMakeFiles\TestSQL4.dir/objects.a @CMakeFiles\TestSQL4.dir\objects1.rsp C:\MinGW\bin\g++.exe -g -Wl,--whole-archive CMakeFiles\TestSQL4.dir/objects.a -Wl,--no-whole-archive -o TestSQL4.exe -Wl,--out-implib,libTestSQL4.dll.a -Wl,--major-image-version,0,--minor-image-version,0 @CMakeFiles\TestSQL4.dir\linklibs.rsp CMakeFiles\TestSQL4.dir/objects.a(main.cpp.obj): In function `main': C:/Users/qem-1/ClionProjects/TestSQL4/main.cpp:5: undefined reference to `PQconnectdb' collect2.exe: error: ld returned 1 exit status mingw32-make.exe[3]: *** [TestSQL4.exe] Error 1 CMakeFiles\TestSQL4.dir\build.make:99: recipe for target 'TestSQL4.exe' failed mingw32-make.exe[3]: Leaving directory 'C:/Users/qem-1/.clion11/system/cmake/generated/e98d4593/e98d4593/Debug' CMakeFiles\Makefile2:69: recipe for target 'CMakeFiles/TestSQL4.dir/all' failed mingw32-make.exe[2]: Leaving directory 'C:/Users/qem-1/.clion11/system/cmake/generated/e98d4593/e98d4593/Debug' CMakeFiles\Makefile2:81: recipe for target 'CMakeFiles/TestSQL4.dir/rule' failed mingw32-make.exe[1]: Leaving directory 'C:/Users/qem-1/.clion11/system/cmake/generated/e98d4593/e98d4593/Debug' mingw32-make.exe[2]: *** [CMakeFiles/TestSQL4.dir/all] Error 2 mingw32-make.exe[1]: *** [CMakeFiles/TestSQL4.dir/rule] Error 2 mingw32-make.exe: *** [TestSQL4] Error 2 Makefile:120: recipe for target 'TestSQL4' failed
0
|
|
| 27.10.2015, 09:27 | |
|
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|
| 27.10.2015, 09:28 | |
|
QEM, не надо собирать x64. Проблема не в этом.
Должен быть первоначальный вариант CmakeLists с добавлением verbose. Удаленный (перемещенный) libpq.lib из каталога (должен остаться только libpq.a и libpq.dll). И содержимое файла @CMakeFiles\TestSQL4.dir\linklibs.rsp прикрепи.
0
|
|
|
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 19
|
|
| 27.10.2015, 09:31 [ТС] | |
|
DrOffset, Да, libpq.lib удалён. Cmakelists изменён, как ты и говорил. Вариант первоначальный с добавлением в начало строчки
Содержимое linklibs.rsp: -llibpq -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|
| 27.10.2015, 09:33 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 19
|
|
| 27.10.2015, 09:36 [ТС] | |
|
DrOffset, Cmakelists:
set(CMAKE_VERBOSE_MAKEFILE true) cmake_minimum_required(VERSION 3.3) project(TestSQL4) find_package(PostgreSQL REQUIRED) include_directories (${PostgreSQL_INCLUDE_DIRS}) set(SOURCES main.cpp) add_executable(TestSQL4 ${SOURCES}) target_link_libraries(TestSQL4 pq) ОШибка: /lib/libpq.dll: file not recognized: File format not recognized
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
||
| 27.10.2015, 09:37 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 19
|
|
| 27.10.2015, 09:43 [ТС] | |
|
DrOffset, Переименовал
Ошибка та же Перезагрузил IDE При компиляции ошибка всё та же: /lib/libpq.dll: file not recognized: File format not recognized
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|
| 27.10.2015, 09:44 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 19
|
|
| 27.10.2015, 09:45 [ТС] | |
|
DrOffset, -lpq -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|
| 27.10.2015, 09:57 | |
|
QEM, так. В linklibs.rsp все правильно. Теперь вопрос такой, нет ли случайно в системе других библиотек libpq.dll, помимо той, которая лежит в lib? Действительно может быть так, что в системе где-то еще стоит libpq.dll другой разрядности, которая цепляется вместо этой.
Добавлено через 7 минут QEM, еще в качестве эксперимента попробуй временно убрать libpq.dll из каталога lib (по идее ее там и не должно быть, в mingw обычно dll-ки в bin лежат). То есть оставь только libpq.a (обратно верни имя как было).
0
|
|
|
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 19
|
|
| 27.10.2015, 10:02 [ТС] | |
|
DrOffset, Насколько я знаю - нет
Откуда им взяться.. Эта библиотека берётся из папки Postgres'а Дело в том, что я ничего ниоткуда больше не качал И на всякий случай переустанавливал и постгрес и Clion Хотя.. У меня в корне C:\ лежала папка lib Со всеми либами постгреса. Это те же самые библиотеки, просто выдернуты из папки постгреса и перенесены в корень C:\ Сейчас удалил её и при компиляции вижу такое: c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lpq Также удалил libpq.dll из lib, имя также изменил на libpq.a Ошибка при компиляции: c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lpq
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|
| 27.10.2015, 10:05 | |
|
1
|
|
|
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 19
|
|
| 27.10.2015, 10:11 [ТС] | |
|
DrOffset, Как это ни странно, ВСЁ СКОМПИЛИРОВАЛОСЬ!!
Боже, неделя адовых мук и страданий) Спасибо тебе огромное! Осталось только понять, какого дьявола путь в либам он берёт именно оттуда. Но уже и с этим костылём работать можно) Добавлено через 2 минуты DrOffset, Кстати, в папке C:\lib Сейчас лежит только libpq.a файл Ему его достаточно для работы?
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
||||
| 27.10.2015, 10:15 | ||||
![]() Добавлено через 45 секунд Для выполнения рядом с exe (или где-то в общедоступном системном пути) должна быть libpq.dll.
0
|
||||
|
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 19
|
|
| 27.10.2015, 10:20 [ТС] | |
|
DrOffset, удалил lib из C:\
В Cmakelists прописал: LINK_DIRECTORIES("C:/Program Files/PostgreSQL/9.4/lib") Всё отлично Что ж они в службе поддержки не догадались.. Ещё раз спасибо! Спас от необходимости пользоваться Visual Studio
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|||
| 27.10.2015, 10:23 | |||
|
Т.е. так:
Инклуды - как обычно в PostgreSQL_INCLUDE_DIRS Так должно работать без всяких костылей. Добавлено через 2 минуты
0
|
|||
|
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 19
|
|
| 27.10.2015, 10:25 [ТС] | |
|
DrOffset, В общем-то да
Да и lib на диске C оказался в результате отчаянных попыток откомпилировать программу
0
|
|
| 27.10.2015, 10:25 | |
|
Ошибка при компиляции. undefined reference LittleCMS при компиляции ошибка undefined reference to `cmsOpenProfileFromFile' qt 5.2 ошибка компиляции undefined reference to Ошибка компиляции (undefined reference) Ошибка компиляции Undefined reference to Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[golang] Pipeline
alhaos 08.06.2026
Pipeline
Pipeline — паттерн конкурентной обработки данных в Go.
Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
|
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь
lIs4oanZS9Y
|
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу.
До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
|
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений.
. . .
|
|
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения
Продолжаю серию постов о дискретно-событийной модели рабочего. . .
|
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы
Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
|
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция
Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
|
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
|