c++ - g++ 问题 : exception not caught

标签 c++ exception exception-handling g++

情况是我有一个用 C++ 编写的动态库,它由另一个动态库为 Python 包装,该动态库也是用 C++ 编写的(具体而言由 SIP 生成)。第一个动态库定义了一个函数do_raise,它抛出一个异常RaiserError,它是std::exception的子类。第二个动态库在包装 do_raise 时 try catch RaiserError 以便将其转换为 Python 异常。

使用 Visual C++ 构建,一切都按预期工作,并且 RaiserError 被正确捕获。但是,在 Linux 上使用 g++ 时,不会捕获 RaiserError。如果我 try catch std::exception(RaiserError 的基类),它会起作用。这里出了什么问题?这两个库是否对 RaiserError 类型有不同的概念,因为它不会被 catch block 识别?

为了测试,我还编写了一个小的可执行文件,它调用 C++ 库中的 do_raise,在这里我甚至可以使用 g++ 捕获 RaiserError

最佳答案

您无法跨模块边界可靠地传递 C++ 异常。在 Windows 上(至少对于 32 位进程)有一个标准的 ABI,但是对于 gcc,你就不走运了。

关于c++ - g++ 问题 : exception not caught,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1458765/

相关文章:

java - 为什么Java编译器允许在throws部分列出方法不可能抛出的异常

c++ - 函数调用给我错误表达式必须有类类型

c++ - c++中的popen等价物

c++ - std::future no_state 异常与断言

java - 将Java Socket配置为在断开连接时快速失败?

.net - Silverlight+WCF 异常 : Expecting application/soap+xml, 收到文本/xml

c++ - org-mode 导出 html 时无法高亮 C++ 源代码

c++ - 多线程和标准输出的性能问题

java - jackson 和可怕的 IOException

java - 如何在java中识别已检查和未检查的异常?