我正在尝试使用 cmake
使用新的 libmysqlcppconn
版本 8 构建简单示例,我下载连接器并从源代码构建和安装。但是当我尝试使用 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
?
最佳答案
通过添加带扩展的库修复
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)
关于c++ - 在 Linux 中构建时出现 Mysqlcppconn8 和 cmake 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56367629/