DLL内的C ++异常(MinGW)

时间:2017-02-08 10:08:55

标签: c++ windows exception dll mingw

我正在用C ++编写一个Windows DLL,MinGw 4.8。该库内部使用C ++类和异常,但其接口仅限C语言,即。没有例外在图书馆外传播。

不幸的是,当我使用-static选项编译库时,不会捕获C ++异常。即使这个简单的示例失败,也不会捕获异常并且应用程序被中止:

try {
    throw std::logic_error("Hello World");
} catch (...) {
    std::cout << "Exception caught" << std::endl;
}

当我在没有-static命令行开关的情况下编译库时,它可以正常工作。有趣的是,我的库的旧版本过去甚至使用静态链接工作,现在我很困惑为什么它停止工作......

我从一个由同一编译器编译的简单测试C ++应用程序调用该库,但我需要使该库与其他编译器/语言兼容。

请问有人建议如何解决这个问题吗?

编辑:我尝试用-static选项替换-static-libstdc++ -static-libgcc选项。现在当我删除-static-libgcc时,异常处理工作正常。

所以我的问题与libgcc的静态链接有关,但我仍然无法弄清楚为什么这很重要。有什么想法吗?

EDIT2:当我调试我的DLL时,它会调用DLL中嵌入的_Unwind_RaiseException函数。它看起来像某种ABI不兼容......在这里,人们处理类似的问题: C++ exceptions and the .eh_frame ELF section

Klasyc

0 个答案:

没有答案