2

我的项目链接了很多静态库。所有这些以前都链接得很好,但是现在我添加了 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 选项链接。为什么?
提前致谢!

4

1 回答 1

0

/MTd该错误表明项目中使用的 CRT 库(多线程静态调试)与静态链接库使用的 CRT 库(多线程静态发布)之间存在冲突/MT。这是一种错误情况,因为一个模块(EXE 或 DLL)只能拥有/使用一份 CRT 副本。

来自/MD、/MT、/LD(使用运行时库)注释:

传递给链接器的给定调用的所有模块都必须使用相同的运行时库编译器选项进行编译

要修复错误,请使用(发布配置)构建项目,或者使用(调试配置)/MT重建静态库并链接到该调试库。/MTd

不使用 MSVC 运行时的库不受影响,可以毫无顾虑地与调试或发布版本一起使用。

于 2020-10-03T00:41:39.960 回答