[英]Static library (/MT) linking conflicts with project /MTd option
我的项目链接了很多静态库。 所有这些以前链接都很好,但现在我添加了 mysql c api 库,现在我收到了这样的错误:
mysqlclient.lib(client_authentication.obj):错误 LNK2038:检测到“_ITERATOR_DEBUG_LEVEL”不匹配:值“0”与 mysql_database_connection.obj 中的值“2”不匹配
mysqlclient.lib(client_authentication.obj):错误 LNK2038:检测到“RuntimeLibrary”不匹配:值“MT_StaticRelease”与 mysql_database_connection.obj 中的值“MTd_StaticDebug”不匹配
但前提是我使用 MSVC 运行时库的 MTd 选项构建项目(我使用此运行时库选项进行开发)。 其他静态库链接良好。 我可以通过将 MTd 更改为 MT 来修复错误,但我想使用 MTd。 为什么其他静态库链接正常? 编译选项相同(我自己编译的库),所有库的 MT 选项,但只有 mysql c api 无法与我的项目 MTd 选项链接。 为什么?
提前致谢!
该错误表明项目中使用的 CRT 库( /MTd
多线程静态调试)与静态链接库使用的 CRT 库( /MT
多线程静态发布)之间存在冲突。 这是一种错误情况,因为一个模块(EXE 或 DLL)只能拥有/使用 CRT 的一个副本。
来自/MD, /MT, /LD (Use Run-Time Library)注释:
传递给给定链接器调用的所有模块都必须使用相同的运行时库编译器选项进行编译
要修复错误,请使用/MT
(发布配置)构建项目,或者使用/MTd
(调试配置) /MTd
静态库并链接到该调试库。
不使用 MSVC 运行时的库不受影响,并且可以毫无顾虑地与调试或发布版本一起使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.