使用在构造函数中抛出异常的静态成员对库进行dlopen - 导致Abort
-
03-07-2019 - |
题
我正在尝试使用dlopen函数加载动态库。该库包含一个静态对象,它在其构造函数中抛出异常。我有一个“try-catch(...)”阻止dlopen调用,但它没有捕获异常,我只看到“中止”打印。
我如何能够捕获此异常?
解决方案
简答:你不能
再考虑一下。
原始语句成立,但您还必须记住dlopen()是C库函数。 C不支持例外。因此,抛出从C ++代码到C(您的全局对象备份到dlopen())代码的异常也会导致应用程序终止。
请参阅此处:为什么在异常时不调用析构函数?一>
在这种情况下,抛出异常将终止应用程序。您的具体情况包括:
异常转义非本地静态(即全局)
的构造函数/析构函数不隶属于 StackOverflow