libpqxx и cmake не могут найти -lpq

Я пытаюсь проверить соединение с моей базой данных postgreSQL. Я установил libpqxx отсюда официальный клиентский API C++ для PostgreSQL. Я запустил ./configure PG_CONFIG=/usr/pgsql-10/bin/pg_config для настройки перед выполнением make и make install с настройками по умолчанию. Мне пришлось установить postgresql10-libs и postgresql10-devel, чтобы иметь возможность иметь файл pg_config в первую очередь, потому что моего настоящего сервера PostgreSQL нет на моем ПК.

Пытаюсь скомпилировать с флагами -lpqxx -lpq. Я добавил это в свой CMakeLists.txt:

set(GCC_COVERAGE_COMPILE_FLAGS "-lpqxx -lpq -std=c++11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")

Но я продолжаю получать эту ошибку:

Linking CXX executable myproject
/usr/bin/ld: cannot find -lpq
collect2: error: ld returned 1 exit status
gmake[3]: *** [CMakeFiles/myproject.dir/build.make:1187: myproject] Error 1
gmake[2]: *** [CMakeFiles/Makefile2:68: CMakeFiles/myproject.dir/all] Error 2
gmake[1]: *** [CMakeFiles/Makefile2:80: CMakeFiles/myproject.dir/rule] Error 2
gmake: *** [Makefile:118: myproject] Error 2

ОБНОВЛЕНИЕ 12.06.18

Я установил postgresql-devel и изменил

set(GCC_COVERAGE_COMPILE_FLAGS "-lpqxx -lpq -std=c++11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")

to

set(GCC_COVERAGE_COMPILE_FLAGS "-std=gnu++11")
set(PQXX_AND_PQ_FLAGS "-lpqxx -lpq -I/usr/local/include -L/usr/local/lib")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PQXX_AND_PQ_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")

и ошибка /usr/bin/ld: cannot find -lpq пропала.

но теперь я получаю другие ошибки относительно pqxx

CMakeFiles/myproject.dir/dev/hmmenc_client/db/db.cpp.o: In function `db::connect(std::__cxx11::basic_string<char, std::char_traits<char>,  std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int)':
/home/tglozman/CLionProjects/myproject/dev/hmmenc_client/db/db.cpp:17: undefined reference to `pqxx::connection_base::is_open() const'
/home/tglozman/CLionProjects/myproject/dev/hmmenc_client/db/db.cpp:18: undefined reference to `pqxx::connection_base::dbname()'
/home/tglozman/CLionProjects/myproject/dev/hmmenc_client/db/db.cpp:23: undefined reference to `pqxx::connection_base::disconnect()'
 CMakeFiles/myproject.dir/dev/hmmenc_client/db/db.cpp.o: In function `pqxx::connection_base::connection_base(pqxx::connectionpolicy&)':
/usr/local/include/pqxx/connection_base.hxx:695: undefined reference to `int pqxx::internal::check_library_version<6, 2>()'
/usr/local/include/pqxx/connection_base.hxx:698: undefined reference to `pqxx::connection_base::clearcaps()'
CMakeFiles/myproject.dir/dev/hmmenc_client/db/db.cpp.o: In function `pqxx::connect_direct::connect_direct(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
/usr/local/include/pqxx/connection.hxx:83: undefined reference to `pqxx::connectionpolicy::connectionpolicy(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/local/include/pqxx/connection.hxx:83: undefined reference to `vtable for pqxx::connect_direct'
CMakeFiles/myproject.dir/dev/hmmenc_client/db/db.cpp.o: In function `pqxx::connect_direct::~connect_direct()':
/usr/local/include/pqxx/connection.hxx:78: undefined reference to `vtable for pqxx::connect_direct'
/usr/local/include/pqxx/connection.hxx:78: undefined reference to `pqxx::connectionpolicy::~connectionpolicy()'
CMakeFiles/myproject.dir/dev/hmmenc_client/db/db.cpp.o: In function `pqxx::basic_connection<pqxx::connect_direct>::basic_connection(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
/usr/local/include/pqxx/basic_connection.hxx:57: undefined reference to `pqxx::connection_base::init()'
CMakeFiles/myproject.dir/dev/hmmenc_client/db/db.cpp.o: In function `pqxx::basic_connection<pqxx::connect_direct>::~basic_connection()':
/usr/local/include/pqxx/basic_connection.hxx:66: undefined reference to `pqxx::connection_base::close()'
collect2: error: ld returned 1 exit status

У меня нет проблем в коде с #include <pqxx/pqxx>


person TalG    schedule 11.06.2018    source источник
comment
Вы установили libpq-dev?   -  person Julia Leder    schedule 11.06.2018
comment
Возможный дубликат ссылки CMake на внешнюю библиотеку   -  person Tsyvarev    schedule 12.06.2018
comment
@JuliaLeder Я использую Fedora 28, и dnf install libpq-dev не могу установить пакет.   -  person TalG    schedule 12.06.2018
comment
libpq-devel может быть?   -  person Julia Leder    schedule 12.06.2018
comment
@JuliaLeder Мне пришлось установить postgresql-devel, но теперь есть другие ошибки   -  person TalG    schedule 12.06.2018


Ответы (1)


Возможно, вам придется указать cmake, где установлены «pq» и «pqxx». Либо указав полный путь «-lfullpath-to-pq», либо используя link_directories

person André    schedule 11.06.2018