Я пытаюсь создать простой пример с новой libmysqlcppconn
версией 8, используя cmake
, я загружаю коннектор, собираю и устанавливаю из исходного кода. Но я получаю сообщение об ошибке, когда пытаюсь построить свой helloworld с помощью cmake
или Clion
run
/usr/bin/ld: CMakeFiles/hellogcp.dir/src/main.cpp.o: en la función `mysqlx::abi2::r0::internal::Result_common<mysqlx::abi2::r0::internal::Result_detail>::~Result_common()':
/usr/include/mysqlx/devapi/result.h:71: referencia a `mysqlx::abi2::r0::internal::Result_detail::~Result_detail()' sin definir
/usr/bin/ld: CMakeFiles/hellogcp.dir/src/main.cpp.o: en la función `mysqlx::abi2::r0::internal::Result_common<mysqlx::abi2::r0::internal::Result_detail>::~Result_common()':
/usr/include/mysqlx/devapi/result.h:71: referencia a `mysqlx::abi2::r0::internal::Result_detail::~Result_detail()' sin definir
/usr/bin/ld: CMakeFiles/hellogcp.dir/src/main.cpp.o: en la función `mysqlx::abi2::r0::Result::~Result()':
/usr/include/mysqlx/devapi/result.h:71: referencia a `mysqlx::abi2::r0::internal::Result_detail::~Result_detail()' sin definir
/usr/bin/ld: CMakeFiles/hellogcp.dir/src/main.cpp.o: en la función `mysqlx::abi2::r0::Result::~Result()':
/usr/include/mysqlx/devapi/result.h:71: referencia a `mysqlx::abi2::r0::internal::Result_detail::~Result_detail()' sin definir
я тестирую с
find_library(MYSQL_LIB mysqlcppconn8)
target_link_libraries(${PROJECT_NAME} ${MYSQL_LIB})
Но ошибка одна и та же с find_library
и без.
Если я использую:
set(EXTRA_LIBRARY "mysqlcppconn8")
я получил
/usr/bin/ld: can not be found -lmysqlcppconn8
/usr/bin/ld: can not be found -lmysqlcppconn8
с участием:
g++ -std=c++11 -I .../include -L .../lib64 src/main.cpp -lmysqlcppconn8 -o app
Отлично строит. Но если я уберу -lmysqlcppconn8
, я получу ту же ошибку, что и cmake
.
Как я могу добавить -lmysqlcppconn8
к cmake
?
ошибка одинакова с или без find_library
Исправлено добавлением библиотеки с расширением
if (BUILD_MODE STREQUAL "Docker")
message("***************************** USING STATIC LIBS **************************************")
add_compile_definitions(STATIC_CONCPP)
set(BUILD_SHARED_LIBS OFF)
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "-static")
set(DCMAKE_FIND_LIBRARY_SUFFIXES .a)
find_library(PISTACHE_LIB libpistache.a)
find_library(MYSQL_LIB libmysqlcppconn8-static.a)
set(MY_LIBS ${PISTACHE_LIB} ${MYSQL_LIB})
else()
message("***************************** USING SHARED LIBS **************************************")
find_library(PISTACHE_LIB libpistache.so)
find_library(MYSQL_LIB libmysqlcppconn8.so)
set(MY_LIBS ${PISTACHE_LIB} ${MYSQL_LIB})
endif (BUILD_MODE STREQUAL "Docker")
unset(BUILD_MODE CACHE)
Ошибка, которую вы получили, связана с отсутствием ссылки на нужную библиотеку. Вы имеете в виду, что ошибка вызвана подходом
find_library
? В противном случае, что вы подразумеваете под «но не работает», когда описываете этот подход?