dlopen sur la bibliothèque avec un membre statique qui lève une exception dans le constructeur - entraîne l'abandon
-
03-07-2019 - |
Question
J'essaie de charger une bibliothèque dynamique à l'aide de la fonction dlopen. Cette bibliothèque contient un objet statique qui lève une exception dans son constructeur. J'ai un " try-catch (...) " bloquer l’appel dlopen, mais il ne détecte pas l’exception et je vois juste "Abort". imprimé.
Comment puis-je intercepter cette exception?
La solution
Réponse courte: vous ne pouvez pas
Pensez-y à nouveau.
La déclaration d'origine est valable, mais vous devez également vous rappeler que dlopen () est une fonction de la bibliothèque C. C ne supporte pas les exceptions. Ainsi, le fait de lever une exception passant du code C ++ au code C (votre objet global remontant jusqu'au code dlopen ()) entraînera également l'arrêt de l'application.
Voir ici: Pourquoi destructor n'est pas appelé à l'exception?
Ce sont les situations dans lesquelles le lancement d'une exception mettra fin à l'application. Votre situation spécifique est couverte par:
Une exception échappe au constructeur / destructeur d'un statique non local (ie global)