dlopen en la biblioteca con un miembro estático que arroja una excepción en el constructor - resulta en Abortar
-
03-07-2019 - |
Pregunta
Estoy intentando cargar una biblioteca dinámica usando la función dlopen. Esta biblioteca contiene un objeto estático, que arroja una excepción en su constructor. Tengo un '' try-catch (...) '' bloquear alrededor de la llamada dlopen, pero no detecta la excepción, y solo veo "Abortar" impreso.
¿Cómo puedo detectar esta excepción?
Solución
Respuesta corta: no puedes
Pensándolo de nuevo.
Las declaraciones originales son válidas, pero también debe recordar que dlopen () es una función de biblioteca C. C no admite excepciones. Por lo tanto, lanzar una excepción que cruza del código C ++ al código C (su objeto global de nuevo al código dlopen ()) también provocará la finalización de la aplicación.
Ver aquí: ¿Por qué no se llama a destructor en excepción?
Estas son las situaciones en las que lanzar una excepción finalizará la aplicación. Su situación específica está cubierta por:
Una excepción escapa al constructor / destructor de una estática no local (es decir, global)