Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 库上具有静态成员的dlopen在构造函数中引发异常-导致中止_C++_Unix_Exception_Shared Libraries_Dlopen - Fatal编程技术网

C++ 库上具有静态成员的dlopen在构造函数中引发异常-导致中止

C++ 库上具有静态成员的dlopen在构造函数中引发异常-导致中止,c++,unix,exception,shared-libraries,dlopen,C++,Unix,Exception,Shared Libraries,Dlopen,我正在尝试使用dlopen函数加载动态库。此库包含一个静态对象,该对象在其构造函数中引发异常。我在dlopen调用周围有一个“try-catch(…)”块,但它没有捕获异常,我只看到“Abort”打印出来 我怎样才能捕捉到这个异常?简短的回答:你不能 再想一想。 原始语句适用,但您还必须记住dlopen()是一个C库函数。C不支持异常。因此,抛出C++代码到C(您的全局对象返回到DLPEN())代码的异常也会导致应用程序终止。 请看这里: 在这些情况下,抛出异常将终止应用程序。您的具体情况包括:

我正在尝试使用dlopen函数加载动态库。此库包含一个静态对象,该对象在其构造函数中引发异常。我在dlopen调用周围有一个“try-catch(…)”块,但它没有捕获异常,我只看到“Abort”打印出来


我怎样才能捕捉到这个异常?

简短的回答:你不能

再想一想。
原始语句适用,但您还必须记住dlopen()是一个C库函数。C不支持异常。因此,抛出C++代码到C(您的全局对象返回到DLPEN())代码的异常也会导致应用程序终止。 请看这里:

在这些情况下,抛出异常将终止应用程序。您的具体情况包括:


一个异常逃逸了非局部静态(即全局)的构造函数/析构函数

和显而易见的推论:(1)全局变量,嗯..嗯。。“单身”很糟糕。姆凯?(2) 从打算用作单例的对象的构造函数中抛出异常更糟糕。(3) 库代码不应做任何可能导致调用程序中止的事情,除非契约已被破坏(如传递无效指针)。@R..:完全同意。我认为我们不需要将单例拖到这一步。我们要找的短语是
全局可访问-->可变如果它真的不可变,我不会称它为“状态”但在我的书中,任何具有修改其内容的构造函数的对象都是“可变的”,即使在构造之后没有方法对其进行更改。