如何修复 C++ 中 cmake 中的编译 libpq-fe.h 错误
How to fix compile libpq-fe.h in cmake error in C++
我用 g++ 编译我的程序 "g++ main.cpp -lpq" 没有错误,
并且在 Clion 上使用 cmake 出现此错误
我使用#include <'postgresql/libpq-fe.h'>
>/opt/clion-2018.3.4/bin/cmake/linux/bin/cmake --build /home/dev/Bureau/ENEDIS/PGsql/cmake-build-debug --target PGsql -- -j 2
[ 50%] Linking CXX executable PGsql
CMakeFiles/PGsql.dir/main.cpp.o : Dans la fonction « CloseConn(pg_conn*) » :
/home/dev/Bureau/ENEDIS/PGsql/main.cpp:9 : référence indéfinie vers « PQfinish »
CMakeFiles/PGsql.dir/main.cpp.o : Dans la fonction « ConnectDB() » :
/home/dev/Bureau/ENEDIS/PGsql/main.cpp:19 : référence indéfinie vers « PQconnectdb »
/home/dev/Bureau/ENEDIS/PGsql/main.cpp:22 : référence indéfinie vers « PQstatus »
CMakeFiles/PGsql.dir/main.cpp.o : Dans la fonction « CreateEmployeeTable(pg_conn*) » :
/home/dev/Bureau/ENEDIS/PGsql/main.cpp:175 : référence indéfinie vers « PQresultStatus »
/home/dev/Bureau/ENEDIS/PGsql/main.cpp:178 : référence indéfinie vers « PQclear »
/home/dev/Bureau/ENEDIS/PGsql/main.cpp:185 : référence indéfinie vers « PQclear »
collect2: error: ld returned 1 exit status
CMakeFiles/PGsql.dir/build.make:83: recipe for target 'PGsql' failed
make[3]: *** [PGsql] Error 1
CMakeFiles/Makefile2:72: recipe for target 'CMakeFiles/PGsql.dir/all' failed
make[2]: *** [CMakeFiles/PGsql.dir/all] Error 2
CMakeFiles/Makefile2:84: recipe for target 'CMakeFiles/PGsql.dir/rule' failed
make[1]: *** [CMakeFiles/PGsql.dir/rule] Error 2
Makefile:118: recipe for target 'PGsql' failed
make: *** [PGsql] Error 2
我的CMakeList.txt
cmake_minimum_required(VERSION 3.13)
project(PGsql)
set(CMAKE_CXX_STANDARD 17)
add_executable(PGsql main.cpp)
我想 CMAKE 中缺少配置,但我不知道是什么
您没有让 CMake 通过 -lpq
。为此使用 target_link_libraries()
:
target_link_libraries(PGsql pq)
请注意,要使您的程序可移植,您首先需要找到您将要使用的库和包含项。请参阅 find_package()
、find_library()
和 find_path()
命令。
您可能还需要将错误消息翻译成英文。
我用 g++ 编译我的程序 "g++ main.cpp -lpq" 没有错误, 并且在 Clion 上使用 cmake 出现此错误
我使用#include <'postgresql/libpq-fe.h'>
>/opt/clion-2018.3.4/bin/cmake/linux/bin/cmake --build /home/dev/Bureau/ENEDIS/PGsql/cmake-build-debug --target PGsql -- -j 2
[ 50%] Linking CXX executable PGsql
CMakeFiles/PGsql.dir/main.cpp.o : Dans la fonction « CloseConn(pg_conn*) » :
/home/dev/Bureau/ENEDIS/PGsql/main.cpp:9 : référence indéfinie vers « PQfinish »
CMakeFiles/PGsql.dir/main.cpp.o : Dans la fonction « ConnectDB() » :
/home/dev/Bureau/ENEDIS/PGsql/main.cpp:19 : référence indéfinie vers « PQconnectdb »
/home/dev/Bureau/ENEDIS/PGsql/main.cpp:22 : référence indéfinie vers « PQstatus »
CMakeFiles/PGsql.dir/main.cpp.o : Dans la fonction « CreateEmployeeTable(pg_conn*) » :
/home/dev/Bureau/ENEDIS/PGsql/main.cpp:175 : référence indéfinie vers « PQresultStatus »
/home/dev/Bureau/ENEDIS/PGsql/main.cpp:178 : référence indéfinie vers « PQclear »
/home/dev/Bureau/ENEDIS/PGsql/main.cpp:185 : référence indéfinie vers « PQclear »
collect2: error: ld returned 1 exit status
CMakeFiles/PGsql.dir/build.make:83: recipe for target 'PGsql' failed
make[3]: *** [PGsql] Error 1
CMakeFiles/Makefile2:72: recipe for target 'CMakeFiles/PGsql.dir/all' failed
make[2]: *** [CMakeFiles/PGsql.dir/all] Error 2
CMakeFiles/Makefile2:84: recipe for target 'CMakeFiles/PGsql.dir/rule' failed
make[1]: *** [CMakeFiles/PGsql.dir/rule] Error 2
Makefile:118: recipe for target 'PGsql' failed
make: *** [PGsql] Error 2
我的CMakeList.txt
cmake_minimum_required(VERSION 3.13)
project(PGsql)
set(CMAKE_CXX_STANDARD 17)
add_executable(PGsql main.cpp)
我想 CMAKE 中缺少配置,但我不知道是什么
您没有让 CMake 通过 -lpq
。为此使用 target_link_libraries()
:
target_link_libraries(PGsql pq)
请注意,要使您的程序可移植,您首先需要找到您将要使用的库和包含项。请参阅 find_package()
、find_library()
和 find_path()
命令。
您可能还需要将错误消息翻译成英文。