【发布时间】:2011-04-15 17:54:01
【问题描述】:
我的 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 指令。我想。
【问题讨论】:
-
你在问什么?有什么问题?
-
也许您应该在尝试使用它时添加实际的
#pragma detect_mismatch行。当然,正如 Erik 已经说过的,澄清你到底想知道什么,因为这也不完全清楚。 -
"我编译 D.dll 成功,这不应该发生。"实际的 detect_mismatch 行并不重要。
-
这是一个有趣的链接器功能,我以前从未听说过 - MS 需要更好地记录它。
标签: c++ c visual-studio-2010 linker