bar*_*kin 13 c++ linux g++ exception shared-libraries
据我所知,在C++ STD中没有定义(未定义的行为),当一个共享库在另一个共享库中引发异常时,编译的应用程序应该如何处理这种情况[共享库].G ++/Linux生成的代码表明可以在共享库之间引发异常.
我的问题是:
A将无法处理共享库中的异常B?[我的意思是申请会崩溃; 图书馆A知道可能的例外情况B.这似乎是一个依赖于编译器的问题。我在部署到 Windows 时遇到了问题,其中必须使用共享 libstdc++ 构建 MinGW-GCC 才能启用跨 DLL 异常处理(这对于 Debian 版本来说不是默认的,需要我重新编译 GCC )。
因此,我假设编译器之间不存在通用的 ABI,因为 GCC 甚至在所有方面都不符合自身。就技术考虑而言,低级异常处理信息需要存储在某个地方,而这个地方很可能是第三个库C,它确实处理异常。编译器可能能够共享这个库,但我认为它们不能。
好的一面是:我目前正在为 POSIX 系统和 Windows 交叉编译一个相当大的项目,并在多线程环境中大量使用跨库异常。它与 GCC 的共享 libstdc++ 一起工作,并且由于所有组件都是开源的,因此我可以轻松地重新编译 MinGW 的所有 C++ 依赖项。