【问题标题】:How do I link C++ MySQL Connector Libraries to Cmake?如何将 C++ MySQL 连接器库链接到 Cmake?
【发布时间】:2018-01-09 10:02:57
【问题描述】:

我正在使用 CLion 制作一个使用 MySQL 数据库处理数据的 C++ 程序。我已经下载了 MySQL Connector 和 Boost 并将其链接到我的 cmake 文件。但是,当我尝试构建我的项目时,出现一个错误,提示“未定义对 `_imp__get_driver_instance' 的引用”。有人告诉我链接 MySQL 连接器库,但由于我对 C++ 和使用此连接器很陌生,所以我不知道如何做到这一点。

目前,这是我的 Cmake 文件:

cmake_minimum_required(VERSION 3.8)
project(Learn_Cpp)


set(CMAKE_CXX_STANDARD 17)

include_directories("C:/mysql-connector-c++-noinstall-1.1.9-win32/include" "C:/mysql-connector-c++-noinstall-1.1.9-win32/include/cppconn" "C:/boost_1_66_0")

set(SOURCE_FILES "C++ Tutorials/ClassFile.cpp" "C++ Tutorials/ClassFile.h" "C++ Tutorials/Learn.cpp")
add_executable(Learn_Cpp ${SOURCE_FILES})

有谁知道我该如何解决这个问题?

【问题讨论】:

  • 你需要找到包

标签: c++ mysql boost cmake


【解决方案1】:

MySql 文档对Visual StudioNetbeans 进行了广泛的描述。您需要为 CMake 做相应的事情。

快速而肮脏的方法是在 CMakeLists.txt 中硬编码库的路径:

target_link_libraries(Learn_Cpp c:/path/to/mysql/lib/mysqlcppconn.lib)

请注意,这将链接到连接器的 dll 版本,因此如果您想在构建后运行程序,则需要将 dll 放在 exe 可以找到它的目录中。除此之外,这应该可以工作,但实际上只能在您的机器上针对特定的构建配置工作。为了使其可移植和更健壮,您可以使用find_library 在磁盘上为您的配置找到正确的库文件。同样,您可以使用find_path 来定位包含目录而不是硬编码它们并使用find_packagelocate Boost

在现代 CMake 中,将 find_pathfind_library 调用 MySql 的结果包装在 imported target 中也被认为是一种很好的风格,类似于 FindBoost 为 Boost 所做的那样。

【讨论】:

  • 当你说“你需要把dll放在exe可以找到的目录”时,是不是意味着我需要在项目的某处包含dll文件?
  • 不,至少在 Windows 上,它在构建过程中根本不关心 dll。只有当你运行最终的 exe 时,如果它无法在任何地方找到 dll,它会报错。
猜你喜欢
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
  • 1970-01-01
相关资源
最近更新 更多