Проблема сборки pqxx и куча undefined reference

Пытаюсь собрать pqxx под Windows при помощи MinGW версии 13.2.0. Также собирала PostgreSQL при помощи него, так как собрать из библиотек стандартно установленного Postgres не получается. Сама библиотека собирается, IDE её видит, но при сборке проекта с ней выдаёт кучу undefined reference в пределах 80-84 штук. Будет ли эта библиотека на основе собранных исходников СУБД в MinGW подключаться к стандартно установленному Postgres на винде и как мне исправить эту проблему?

Собирала pqxx в такой последовательности, согласно BUILDING-cmake.

  1. cmake -G "MinGW Makefiles" -DPostgreSQL_ROOT="путь к собранным исходникам Postgres" .
  2. cmake --build .

Вот ошибки (путь к библиотеке был изменён):

C:/MinGW/bin/mingw32-make.exe -f Makefile.Debug mingw32-make1: Entering directory 'D:/Yoel/build-SimpleDatabase-Desktop_Qt_5_14_2_MinGW_64_bit-Debug' g++ -Wl,-subsystem,console -mthreads -o debug\SimpleDatabase.exe debug/main.o -LD:\Yoel\postgresql\lib -lpq -LD:\Yoel\pq\src\libpqxx.a C:\Qt\Qt5.14.2\5.14.2\mingw73_64\lib\libQt5Core.a
C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: debug/main.o: in function throw_for_encoding_error': D:\Yoel\build-SimpleDatabase-Desktop_Qt_5_14_2_MinGW_64_bit-Debug/../pq/include/pqxx/internal/encodings.hxx:124:(.text+0x1c6): undefined reference to pqxx::argument_error::argument_error(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&)' C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: debug/main.o: in function __static_initialization_and_destruction_0': D:\Yoel\build-SimpleDatabase-Desktop_Qt_5_14_2_MinGW_64_bit-Debug/../pq/include/pqxx/strconv.hxx:80:(.text+0x40b): undefined reference to pqxx::internal::demangle_type_name[abi:cxx11](char const*)' C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\Yoel\build-SimpleDatabase-Desktop_Qt_5_14_2_MinGW_64_bit-Debug/../pq/include/pqxx/strconv.hxx:80:(.text+0x43b): undefined reference to pqxx::internal::demangle_type_name[abi:cxx11](char const*)' C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\Yoel\build-SimpleDatabase-Desktop_Qt_5_14_2_MinGW_64_bit-Debug/../pq/include/pqxx/strconv.hxx:80:(.text+0x46b): undefined reference to pqxx::internal::demangle_type_name[abi:cxx11](char const*)' C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\Yoel\build-SimpleDatabase-Desktop_Qt_5_14_2_MinGW_64_bit-Debug/../pq/include/pqxx/strconv.hxx:80:(.text+0x49b): undefined reference to pqxx::internal::demangle_type_name[abi:cxx11](char const*)' C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: debug/main.o: in function pqxx::check_version()': D:\Yoel\build-SimpleDatabase-Desktop_Qt_5_14_2_MinGW_64_bit-Debug/../pq/include/pqxx/util.hxx:248:(.text$_ZN4pqxx13check_versionEv[_ZN4pqxx13check_versionEv]+0x31): undefined reference to pqxx::internal::check_pqxx_version_7_10()' C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: debug/main.o: in function pqxx::connection::connection(char const*)': D:\Yoel\build-SimpleDatabase-Desktop_Qt_5_14_2_MinGW_64_bit-Debug/../pq/include/pqxx/connection.hxx:287:(.text$_ZN4pqxx10connectionC1EPKc[_ZN4pqxx10connectionC1EPKc]+0x79): undefined reference to pqxx::connection::init(char const*)' C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: debug/main.o: in function pqxx::connection::~connection()': D:\Yoel\build-SimpleDatabase-Desktop_Qt_5_14_2_MinGW_64_bit-Debug/../pq/include/pqxx/connection.hxx:329:(.text$_ZN4pqxx10connectionD1Ev[_ZN4pqxx10connectionD1Ev]+0x14): undefined reference to `pqxx::connection::close()' collect2.exe: error: ld returned 1 exit status mingw32-make1: *** [Makefile.Debug:68: debug/SimpleDatabase.exe] Error 1 mingw32-make1: Leaving directory 'D:/Yoel/build-SimpleDatabase-Desktop_Qt_5_14_2_MinGW_64_bit-Debug' mingw32-make: *** [Makefile:45: debug] Error 2


Ответы (1 шт):

Автор решения: Yoel

Проблема была решена данным объявлением библиотек в такой последовательности:

LIBS += D:/Yoel/pq/src/libpqxx.a -LD:/Yoel/postgresql/lib/ -lpq -lws2_32

Не пришлось пересобирать библиотеку под MSVC. Прекрасно работает с обычным PostgreSQL на винде. Без -lws2_32 будут выскакивать undefined reference к небольшой части функций.

→ Ссылка