Question

I am trying to load a dynamic library using dlopen function. This library contains a static object, which throws an exception in its constructor. I have a "try-catch(...)" block around the dlopen call, but it doesn't catch the exception, and I just see "Abort" printed.

How am I able to catch this exception?

Was it helpful?

Solution

Short Answer: You Can't

Thinking about it again.
The original statements holds, but you must also remember that dlopen() is a C library function. C does not support exceptions. Thus throwing an exception that crosses from C++ code to C ( Your global object back upto dlopen() ) code will also cause application termination.

See here:Why destructor is not called on exception?

These are the situations under which throwing an exception will terminate the application. Your specific situation is covered by:

An exception escapes the constructor/destructor of a non local static (ie global)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top