如何解决CLion中MySQL Connector的_imp__get_driver_instance未定义引用错误
解决MySQL Connector/C++中"Undefined reference to _imp__get_driver_instance"链接错误
嘿,这个问题我之前也踩过坑,本质就是链接阶段没把MySQL Connector的库文件加入项目——你已经通过include_directories让编译器识别了函数声明,但链接器找不到get_driver_instance的实际实现代码,所以才会报这个错误。
给你一步步梳理解决方案:
1. 定位MySQL Connector的库目录
你的Connector路径是C:/mysql-connector-c++-noinstall-1.1.9-win32,进入这个目录下的lib文件夹,能找到适配MinGW环境的库文件:
libmysqlcppconn.dll.a:动态链接用的导入库libmysqlcppconn-static.a:静态链接用的完整库
2. 修改CMakeLists.txt配置
在你原有的配置基础上,添加库目录指定和链接指令:
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" ) # 指定库文件所在的目录 link_directories("C:/mysql-connector-c++-noinstall-1.1.9-win32/lib") set(SOURCE_FILES "C++ Tutorials/ClassFile.cpp" "C++ Tutorials/ClassFile.h" "C++ Tutorials/Learn.cpp") add_executable(Learn_Cpp ${SOURCE_FILES}) # 链接MySQL Connector库 # 选择动态链接的话用这行: target_link_libraries(Learn_Cpp mysqlcppconn) # 如果选静态链接,替换成下面两行(需要定义静态宏避免编译冲突): # target_compile_definitions(Learn_Cpp PRIVATE MYSQLCPPCONN_STATIC) # target_link_libraries(Learn_Cpp mysqlcppconn-static)
3. 额外注意事项
- 若选择动态链接,记得把
libmysqlcppconn.dll从Connector的lib文件夹复制到你的可执行文件生成目录(比如cmake-build-debug),否则运行程序时会提示找不到DLL。 - 少数版本的Connector需要显式调用命名空间下的函数,若修改CMake后仍报错,可以把代码里的
driver = get_driver_instance();改成driver = sql::mysql::get_driver_instance();。
按照上述步骤修改后重新构建项目,应该就能解决这个链接错误了!
内容的提问来源于stack exchange,提问作者Timothy Alexander
相关产品推荐
相关产品推荐

