静态库/ MT与项目/ MTd选项链接冲突

问题描述

我的项目链接了许多静态库。他们以前所有的链接都很好,但是现在我添加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多线程静态调试)与静态链接的库(/MT多线程静态发行版)之间存在冲突。这是一种错误情况,因为一个模块(EXE或DLL)只能拥有/使用一个CRT副本。

摘自/MD,/MT,/LD (Use Run-Time Library)注释:

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

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

不使用MSVC运行时的库不会受到影响,并且可以与调试版本或发行版本一起使用而无需担心。