1

Весь день пытался настроить C++ API для PostgreSQL. Ничего из этого не выходит. Сталкиваюсь с данной проблемой. Весь интернет обыскал в поисках решения. Вот мой CMakeList.txt:

CMAKE_MINIMUM_REQUIRED(VERSION 3.21)
PROJECT(ClienServerEcn)

FIND_PACKAGE(Boost 1.40 COMPONENTS system REQUIRED) FIND_PACKAGE(Threads REQUIRED) FIND_PACKAGE(PostgreSQL REQUIRED) FIND_PACKAGE(libpqxx REQUIRED)

INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})

SET(CMAKE_CXX_STANDARD 17)

SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ../bin)

ADD_EXECUTABLE(Server ../src/Server.cpp ../src/Common.hpp ../src/json.hpp) TARGET_LINK_LIBRARIES(Server PRIVATE Threads::Threads ${Boost_LIBRARIES})

ADD_EXECUTABLE(Client ../src/Client.cpp ../src/Common.hpp ../src/json.hpp) TARGET_LINK_LIBRARIES(Client PRIVATE Threads::Threads ${Boost_LIBRARIES})

Проблема:

user@user-PK:~/eclipse-workspace/path/mk$ make
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/eclipse-workspace/path/mk
Consolidate compiler generated dependencies of target Server
[ 25%] Building CXX object CMakeFiles/Server.dir/home/user/eclipse-workspace/path/src/Server.cpp.o
[ 50%] Linking CXX executable "/home/user/eclipse-workspace/path/bin/Server"
/usr/bin/ld: CMakeFiles/Server.dir/home/user/eclipse-workspace/path/src/Server.cpp.o: в функции «main»:
Server.cpp:(.text+0x38e): неопределённая ссылка на «pqxx::connection::dbname() const»
/usr/bin/ld: CMakeFiles/Server.dir/home/user/eclipse-workspace/path/src/Server.cpp.o: в функции «__static_initialization_and_destruction_0(int, int)»:
Server.cpp:(.text+0x5da): неопределённая ссылка на «pqxx::internal::demangle_type_name[abi:cxx11](char const*)»
/usr/bin/ld: Server.cpp:(.text+0x621): неопределённая ссылка на «pqxx::internal::demangle_type_name[abi:cxx11](char const*)»
/usr/bin/ld: Server.cpp:(.text+0x957): неопределённая ссылка на «pqxx::internal::demangle_type_name[abi:cxx11](char const*)»
/usr/bin/ld: Server.cpp:(.text+0xa32): неопределённая ссылка на «pqxx::internal::demangle_type_name[abi:cxx11](char const*)»
/usr/bin/ld: CMakeFiles/Server.dir/home/user/eclipse-workspace/path/src/Server.cpp.o: в функции «pqxx::check_version()»:
Server.cpp:(.text._ZN4pqxx13check_versionEv[_ZN4pqxx13check_versionEv]+0x31): неопределённая ссылка на «pqxx::internal::check_pqxx_version_PQXX_VERSION_MAJOR_PQXX_VERSION_MINOR()»
/usr/bin/ld: CMakeFiles/Server.dir/home/user/eclipse-workspace/path/src/Server.cpp.o: в функции «pqxx::connection::connection(char const*)»:
Server.cpp:(.text._ZN4pqxx10connectionC2EPKc[_ZN4pqxx10connectionC5EPKc]+0x6b): неопределённая ссылка на «pqxx::connection::init(char const*)»
/usr/bin/ld: CMakeFiles/Server.dir/home/user/eclipse-workspace/path/src/Server.cpp.o: в функции «pqxx::connection::~connection()»:
Server.cpp:(.text._ZN4pqxx10connectionD2Ev[_ZN4pqxx10connectionD5Ev]+0x18): неопределённая ссылка на «pqxx::connection::close()»
/usr/bin/ld: CMakeFiles/Server.dir/home/user/eclipse-workspace/path/src/Server.cpp.o: в функции «pqxx::transaction<(pqxx::isolation_level)0, (pqxx::write_policy)1>::transaction(pqxx::connection&)»:
Server.cpp:(.text._ZN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EEC2ERNS_10connectionE[_ZN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EEC5ERNS_10connectionE]+0x31): неопределённая ссылка на «pqxx::internal::basic_transaction::basic_transaction(pqxx::connection&, pqxx::zview)»
/usr/bin/ld: CMakeFiles/Server.dir/home/user/eclipse-workspace/path/src/Server.cpp.o: в функции «pqxx::transaction<(pqxx::isolation_level)0, (pqxx::write_policy)1>::~transaction()»:
Server.cpp:(.text._ZN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EED2Ev[_ZN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EED5Ev]+0x26): неопределённая ссылка на «pqxx::transaction_base::close()»
/usr/bin/ld: Server.cpp:(.text._ZN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EED2Ev[_ZN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EED5Ev]+0x32): неопределённая ссылка на «pqxx::internal::basic_transaction::~basic_transaction()»
/usr/bin/ld: CMakeFiles/Server.dir/home/user/eclipse-workspace/path/src/Server.cpp.o:(.data.rel.ro._ZTVN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EEE[_ZTVN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EEE]+0x20): неопределённая ссылка на «pqxx::internal::basic_transaction::do_commit()»
/usr/bin/ld: CMakeFiles/Server.dir/home/user/eclipse-workspace/path/src/Server.cpp.o:(.data.rel.ro._ZTVN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EEE[_ZTVN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EEE]+0x28): неопределённая ссылка на «pqxx::transaction_base::do_abort()»
/usr/bin/ld: CMakeFiles/Server.dir/home/user/eclipse-workspace/path/src/Server.cpp.o:(.data.rel.ro._ZTIN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EEE[_ZTIN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EEE]+0x10): неопределённая ссылка на «typeinfo for pqxx::internal::basic_transaction»
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/Server.dir/build.make:98: /home/user/eclipse-workspace/path/bin/Server] Ошибка 1
make[1]: *** [CMakeFiles/Makefile2:85: CMakeFiles/Server.dir/all] Ошибка 2
make: *** [Makefile:91: all] Ошибка 2
user@user-PK:~/eclipse-workspace/path/mk$ 

Сборку осуществляю через CMake:

cd mk
make

Т.к. на простом стаковерфлоу без приставки ru. мой вопрос забанили из-за русского языка, а решение я нашёл - прикреплю решение здесь


Теперь при запуске приложения возникает следующая проблема:

error while loading shared libraries: libpqxx-7.4.so: 
cannot open shared object file: No such file or directory

Проблема решается следующим образом: https://stackoverflow.com/questions/12781566/error-while-loading-shared-libraries-libpq-so-5-cannot-open-shared-object-file

Try this:

1: Know the path of libpq.so.5

find / -name libpq.so.5 Output example: /usr/pgsql-9.4/lib/libpq.so.5 If found nothing, check if you have already installed the suitable postgresql-libs for your postgresql version and your OS platform

2: Symbolic link that library in a "well known" library path like /usr/lib:

ln -s /usr/pgsql-9.4/lib/libpq.so.5 /usr/lib/libpq.so.5

Sega
  • 9

1 Answers1

-1

https://github.com/jtv/libpqxx/issues/425#issuecomment-805662359

Привет, я сделал это C:\devtools\libpqxx-6.4.5>cmake --build . --target cleanв корневом каталоге проекта libpqxx. Результат был:

Microsoft (R) Build Engine version 16.9.0+57a23d249 for .NET Framework Copyright (C) Microsoft Corporation. All rights reserved.

Затем я сделал: cmake -DBUILD_SHARED_LIBS=ON И затем: cmake --build . --config Release И затем: cmake --install . В результате установки все файлы были отмечены как «Обновленные».

Затем продолжил работу над своим проектом. Я не получаю ошибок компиляции отсутствующих включений, кажется, теперь он может их найти. Связывание со строкой : target_link_libraries(NOSDatabaseProcess libpqxx::pqxx_static) или строкой : target_link_libraries(NOSDatabaseProcess libpqxx::pqxx_shared) дает мне ошибки компоновщика, которые я разместил в предыдущем комментарии.

Спасибо, С уважением

Благодарю за найденое решение. Кажется - всё прошло успешно.

Sega
  • 9