Windows下运行MySQL Connector/C++ 8.0.27示例程序出现链接错误
问题根因
Windows平台下MySQL Connector/C++的头文件默认通过预编译宏判断依赖的库类型,未指定静态库宏的情况下,头文件会给所有导出接口添加__declspec(dllimport)修饰,导致编译生成的目标文件会查找带__imp__前缀的导入符号,和静态库内不带该前缀的符号无法匹配,因此报LNK2001错误。
解决方案
按如下顺序排查修改即可:
- 给测试项目添加预编译宏
STATIC_CONCPP,该宏会告知头文件使用静态库版本的接口定义,移除自动添加的dllimport修饰。
Visual Studio设置路径:项目属性 → C/C++ → 预处理器 → 预处理器定义,新增STATIC_CONCPP条目。
若使用CMake构建测试项目,在CMakeLists.txt中添加:add_compile_definitions(STATIC_CONCPP) - 对齐运行时库版本:你编译Connector时使用的是静态运行时,测试项目也需要使用相同的运行时选项,禁止混用动态/静态运行时。
Visual Studio设置路径:项目属性 → C/C++ → 代码生成 → 运行库,Release模式选多线程 (/MT),Debug模式选多线程调试 (/MTd)。 - 补全链接依赖库:除了
mysqlcppconn-static.lib外,还需要添加以下依赖库到链接列表:legacy_stdio_definitions.lib、Dnsapi.lib、Crypt32.lib、Secur32.lib、编译Connector时用到的OpenSSL静态库(libssl.lib、libcrypto.lib)、MySQL客户端静态库(libmysql.lib)。
内容的提问来源于stack exchange,提问作者M H
相关产品推荐
相关产品推荐

