使用#pragma detect_mismatch确保DLL使用正确的静态链接库
|
我有一个由我的D.dll使用的静态S.lib。
我正在尝试使用#pragma detect_mismatch来确保两者都是在相同的发行版或调试设置下进行编译的。
我在这里遵循了Holger Grund的指示
http://boost.2283326.n4.nabble.com/Boost-and-Microsoft-s-SECURE-SCL-td3025203.html
S.lib上的dumpbin显示:
Linker Directives
-----------------
/FAILIFMISMATCH:\"COMPILED_DEBUG=1\"
/INCLUDE:_dll_impl_interface_mismatch_check
/DEFAULTLIB:\"MSVCRTD\"
/DEFAULTLIB:\"OLDNAMES\"
我成功编译了D.dll,这应该不会发生。
D.dll的D.lib上的dumpbin显示:
Linker Directives
-----------------
/FAILIFMISMATCH:\"COMPILED_DEBUG=2\"
/INCLUDE:_dll_impl_interface_mismatch_check
/DEFAULTLIB:\"uuid.lib\"
/DEFAULTLIB:\"uuid.lib\"
/FAILIFMISMATCH:\"_MSC_VER=1600\"
/FAILIFMISMATCH:\"_ITERATOR_DEBUG_LEVEL=2\"
/DEFAULTLIB:\"msvcprtd\"
/DEFAULTLIB:\"MSVCRTD\"
/DEFAULTLIB:\"OLDNAMES\"
任何帮助将不胜感激。
编辑:
我在我的静态库和正在使用的DLL中意外地定义了符号''dll_impl_interface_mismatch_check \'。这意味着在静态库S.lib中未查找该符号,并且从未找到mismatch指令。我认为。
没有找到相关结果
已邀请:
2 个回复
癸痊醒
尝试:
骂陋冠
一起使用。 例如。
IMO更好的解决方案是使用ѭ7链接到您的库,然后构建类似的字符串并将其用作lib文件名的一部分:
这样,您就不能使用错误的库(除非您更改代码或使用错误的文件名创建lib或之后重命名)。当然,如果您像我一样偏执,那么您总是可以两者都做的:)