dlopen sulla libreria con un membro statico che genera un'eccezione nel costruttore - risulta in Abort
-
03-07-2019 - |
Domanda
Sto cercando di caricare una libreria dinamica usando la funzione dlopen. Questa libreria contiene un oggetto statico, che genera un'eccezione nel suo costruttore. Ho un " try-catch (...) " bloccare attorno alla chiamata non aperta, ma non rileva l'eccezione e vedo solo " Abort " stampata.
Come posso cogliere questa eccezione?
Soluzione
Risposta breve: impossibile
Ripensandoci.
Le istruzioni originali sono valide, ma devi anche ricordare che dlopen () è una funzione di libreria C. C non supporta le eccezioni. Pertanto, generare un'eccezione che attraversa dal codice C ++ al codice C (il tuo oggetto globale di backup su dlopen ()) causerà anche la chiusura dell'applicazione.
Vedi qui: Perché il distruttore non viene chiamato in eccezione?
Queste sono le situazioni in cui il lancio di un'eccezione termina l'applicazione. La tua situazione specifica è coperta da:
Un'eccezione sfugge al costruttore / distruttore di una statica non locale (cioè globale)