|
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 19
|
||||||
PostgreSQL и CLion, ошибка при компиляции undefined reference27.10.2015, 00:14. Показов 12124. Ответов 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 |
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|
| 27.10.2015, 09:26 | |
|
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
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|
| 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
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|
| 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
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||
| 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
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|
| 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
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|
| 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
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|
| 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
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||||
| 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
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||
| 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|