g ++中共享C++库之间的异常

bar*_*kin 13 c++ linux g++ exception shared-libraries

据我所知,在C++ STD中没有定义(未定义的行为),当一个共享库在另一个共享库中引发异常时,编译的应用程序应该如何处理这种情况[共享库].G ++/Linux生成的代码表明可以在共享库之间引发异常.

我的问题是:

  1. 它是便携式的(MSVS)吗?
  2. 在哪种情况下共享库A将无法处理共享库中的异常B?[我的意思是申请会崩溃; 图书馆A知道可能的例外情况B.
  3. 我的示例中的异常处理行为是否依赖于链接器?

thi*_*ton 2

这似乎是一个依赖于编译器的问题。我在部署到 Windows 时遇到了问题,其中必须使用共享 libstdc++ 构建 MinGW-GCC 才能启用跨 DLL 异常处理(这对于 Debian 版本来说不是默认的,需要我重新编译 GCC )。

因此,我假设编译器之间不存在通用的 ABI,因为 GCC 甚至在所有方面都不符合自身。就技术考虑而言,低级异常处理信息需要存储在某个地方,而这个地方很可能是第三个库C,它确实处理异常。编译器可能能够共享这个库,但我认为它们不能。

好的一面是:我目前正在为 POSIX 系统和 Windows 交叉编译一个相当大的项目,并在多线程环境中大量使用跨库异常。它与 GCC 的共享 libstdc++ 一起工作,并且由于所有组件都是开源的,因此我可以轻松地重新编译 MinGW 的所有 C++ 依赖项。