c - 调试和发布之间的奇怪链接差异导致未解析的 _except_handler3,或者为什么,哦,为什么我不知道 libcmtd?

标签 c windows winapi crt

我一直在开发的一个 Windows 应用程序是在不使用 CRT 的情况下交付的。 有一些很好的文章描述了这样做的指导方针和好处(我在写这个问题时找不到这些 - 抱歉)。除了不明确使用 CRT 符号之外,这一切都与链接器和编译器配置有关。我的发布和调试配置现在几乎相同,并且都指定 /NODEFAULTLIB:"LIBCMT" 唯一的区别是运行时标志 /MT (在发布中)与 /MTd (在调试中) - 这是必需的,因为我对 SEH 使用 __try/__ except 语法,因此唯一需要的函数是 _except_handler3()。但是,调试版本正在成功构建,而发布版本则失败,并出现 Unresolved Symbol _ except_handler3 链接错误。当强制发布版本使用 /MTd 进行编译时 - 此问题已解决。

这怎么可能?哪个 .lib 包含 _ except_handler3 导出?我该如何解决这个问题?

最佳答案

对于没有 CRT 的应用程序,请参阅:http://blog.kalmbach-software.de/2008/02/02/smallest-application-size-for-win32-console-application/

但是如果你想使用__try/__ except则需要使用CRT;或者您需要编写自己的“_ except_handler3”。

另请参阅:_except_handler3

您还有 CRT 源代码,您可以查看源代码,看看它在做什么! 请参阅:C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\crt\src

关于c - 调试和发布之间的奇怪链接差异导致未解析的 _except_handler3,或者为什么,哦,为什么我不知道 libcmtd?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21916530/

相关文章:

c - 如何使用预处理器使 "goto"转到由变量设置的标签?

windows - 将 Windbg 命令输出写入文件,但不写入控制台

c - 在 Windows 7 上使用 Turbo C

Python 3.4 - 使用 SAPI 的文本到语音

winapi - WriteFile字符串字节长度导致崩溃

c - 在结构中使用 posix_memalign 出现段错误

java - 将 C 字节数组解析为 Java ByteBuffer。

从其他进程单击其他窗口的按钮

c++ - 无法使用 DWM 在自定义窗口框架上绘制

winapi - 为什么是 TTN_NEEDTEXTW 而不是 TTN_NEEDTEXTA?