Как скомпоновать (link) сторонную статическую библиотеку к cmake-проекту?
Cтолкнулся со следующей проблемой:
Wndows10 | GCC 9.2.0 | CMake 3.20
Для моего проекта необходимы инструменты для работы с PostgreSQL, для этой цели я решил использовать библиотеку libpqxx (https://github.com/jtv/libpqxx || ВЕРСИЯ 7.5.1).
Выполнил всю необходимые процедуры, чтобы собрать и скомпилировать её — в итоге имею "C:/Program Files/libpqxx", из которой мне нужно подтянуть файл pqxx.lib к моему проекту. Файл находится по пути: "C:/Program Files/libpqxx/lib/pqxx.lib".
Выполняю проект в CLion. CMake я начал использовать пару дней назад, мой cmake-код выглядит так:
# Устанавливаю переменную абсолютного пути
set(PQXX_ROOT "C:/Program Files/libpqxx")
# Пытаюсь найти библиотеки libpq.lib и pqxx.lib по заданным путям
find_library(PostgresLIB libpq HINTS ${PostgreSQL_LIBRARY_DIR})
find_library(PqxxLIB pqxx HINTS ${PQXX_ROOT}/lib)
# Подключение библиотек
target_link_libraries(${PROJECT_NAME} PUBLIC ${PostgresLIB} ${PqxxLIB} ws2_32 wsock32)
При компиляции получаю следующую ошибку:
====================[ Build | database | Release ]==============================
"C:\Program Files\JetBrains\CLion 2019.2.5\bin\cmake\win\bin\cmake.exe" —build C:\Users\User\CLionProjects\calcApplication\cmake-build-release —target database — -j 4
[ 50%] Linking CXX executable database.exe
C:/Program Files/PostgreSQL/13/lib/libpq.dll: file not recognized: file format not recognized
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [database/database.exe] Error 1
database\CMakeFiles\database.dir\build.make:87: recipe for target 'database/database.exe' failed
mingw32-make.exe[2]: *** [database/CMakeFiles/database.dir/all] Error 2
CMakeFiles\Makefile2:92: recipe for target 'database/CMakeFiles/database.dir/all' failed
mingw32-make.exe[1]: *** [database/CMakeFiles/database.dir/rule] Error 2
CMakeFiles\Makefile2:99: recipe for target 'database/CMakeFiles/database.dir/rule' failed
mingw32-make.exe: *** [database] Error 2
Makefile:117: recipe for target 'database' failed
Что интересно, в VS2019 все работает отлично (только если настраивать не через CMake, а через свойства проекта, как в этом видео: https://youtu.be/qDiC1Wja6Og). Cистемные библиотеки тоже линкуются без ошибок. Например, для работы с Boost.Asio необходимы ws2_32.lib и wsock32.lib, которые находятся в C:/Windows/system32 — их команда target_link_libraries линкует без ошибок.