小编Rob*_*ith的帖子

如何捕获GCC C++中从库中抛出的异常?

当我使用dlopen动态加载库时,似乎我无法捕获该库抛出的异常.据我所知,这是因为dlopen是一个C函数.

还有另一种动态加载库的方法,可以捕获GCC中lib抛出的异常吗?

在Windows中你可以使用LoadLibrary但是对于Linux我只发现了dlopen但是在使用dlopen时我无法捕获异常.

编辑:我试过void*handle = dlopen("myLib.so",RTLD_NOW | RTLD_GLOBAL); 我仍然无法捕获myLib.so抛出的异常

编辑2:我使用自己的命名空间抛出自定义异常.我希望能够在库外捕获这些异常.我希望能够在不同的编译器上编译,例如GCC 3.2和GCC 4.1.

在myLib2.so中我抛出异常,一个例子:

namespace MyNamespace {  
    void MyClass::function1() throw(Exception1) {  
        throw Exception1("Error message");  
    } 
}
Run Code Online (Sandbox Code Playgroud)

在myLib1.so中我想捕获该异常:

std::auto_ptr <MyNamespace::MyClass> obj = MyNamespace::getClass();
try {  
    obj->function1();  
} catch (MyNamespace::Exception1& e) {  
    std::cout << e.what();  //This is not caught for some reason.  
}
Run Code Online (Sandbox Code Playgroud)

mylib1.so动态加载myLib2.so:

void* handle = dlopen("myLib2.so", RTLDNOW | RTLDGLOBAL);
Run Code Online (Sandbox Code Playgroud)

适用于Windows(以捕捉我的异常)但在那里我当然不使用dlopen.

编辑3:myLib1.so是动态链接的.

c++ gcc exception-handling dynamic

3
推荐指数
1
解决办法
2934
查看次数

标签 统计

c++ ×1

dynamic ×1

exception-handling ×1

gcc ×1