如何将c++mysql连接器库链接到cmake?

roejwanj  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(396)

我使用clion来制作一个c程序,它使用mysql数据库来处理数据。我已经下载了mysql连接器和boost,并将其链接到我的cmake文件。然而,当我试图构建我的项目时,出现了一个错误:“未定义对`\u imp\u get\u driver\u 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})

有人知道我如何解决这个问题吗?

bwitn5fc

bwitn5fc1#

mysql文档为visualstudio和netbeans详细描述了这一点。你需要为cmake做相应的事情。
快速而肮脏的方法是只硬编码到您数据库中的库的路径 CMakeLists.txt :

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

请注意,这将针对连接器的dll版本进行链接,因此如果要在生成后运行程序,则需要将dll放置在exe可以找到它的目录中。除此之外,这应该可以工作,但实际上只适用于特定构建配置的计算机。为了使它更具可移植性和健壮性,您可以使用 find_library 为磁盘上的配置找到正确的库文件。同样,您可以使用 find_path 定位include目录而不是硬编码它们并使用 find_package 找到增压器。
在现代的cmake中,将结果 Package 起来也是一种很好的风格 find_path 以及 find_library 在导入的目标中调用mysql,类似于 FindBoost 做这件事是为了提高效率。

相关问题