Весь день пытался настроить 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