c++ - 在 Linux 中构建时出现 Mysqlcppconn8 和 cmake 错误

标签 c++ mysql linux cmake

我正在尝试使用 cmake 使用新的 libmysqlcppconn 版本 8 构建简单示例,我下载连接器并从源代码构建和安装。但是当我尝试使用 cmakeClion run

构建我的 helloworld 时出现错误
/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/

相关文章:

c++ - 如何处理笔记本电脑上的电源关闭按钮

php - MySQL数据库存储图片url和php页面显示吗?

MySQL 曾经允许 CHAR 列 FK 到另一个表 ENUM 列,但现在不再了?

c++ - 将类实例移至类成员后无法初始化类实例?

c++ - 关于 C++ 中的字符串流

linux - Bash 脚本 - 文件大小

c++ - 使用 Eclipse 调试时如何在 Linux 中查看 C++ shared_ptr 内容?

linux - 在 CC/GCC 构建期间, 'make' 是否未输出 "redirecting incorrect #include"警告?

iphone - Objective-C 的其他选择

php - 如果使用左连接的表中不存在数据,如何将记录显示为空