我有一个静态 S.lib,供我的 D.dll 使用。
我正在尝试使用 #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,这是不应该发生的。
dumpbin 在 D.dll 的 D.lib 上显示:
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 中查找该符号,并且从未找到不匹配指令。我想。
最佳答案
我只是猜测 - 我今晚必须试验一下。
Holger Grund 的指令是为依赖于 DLL 的对象设计的。在您的情况下,DLL 取决于静态库。
所以,我猜您希望将 _dll_impl_interface_mismatch_check
对象添加到静态库而不是 DLL。所以不是:
extern "C" const char dll_impl_interface_mismatch_check=0;
cl /c /Zl foo.cpp
lib D.lib foo.obj
尝试:
extern "C" const char dll_impl_interface_mismatch_check=0;
cl /c /Zl foo.cpp
lib S.lib foo.obj
关于c++ - 使用#pragma detect_mismatch 确保 DLL 使用正确的静态链接库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5680530/