Je fais une DLL Windows en C ++, MinGw 4.8. La bibliothèque utilise en interne des classes et des exceptions C ++, mais son interface est en C uniquement, c.-à-d. aucune exception n’est propagée en dehors de la bibliothèque.
Malheureusement, lorsque je comstack la bibliothèque avec l’option -static
, les exceptions C ++ ne sont pas interceptées. Même cet exemple simple échoue, l’exception n’est pas interceptée et l’application est annulée:
try { throw std::logic_error("Hello World"); } catch (...) { std::cout << "Exception caught" << std::endl; }
Lorsque je comstack la bibliothèque sans l’ -static
, cela fonctionne bien. Ce qui est amusant, c’est que les anciennes versions de ma bibliothèque fonctionnaient même avec des liaisons statiques et maintenant, je suis assez perplexe quant à la raison pour laquelle elle a cessé de fonctionner …
J’appelle la bibliothèque à partir d’une simple application de test C ++ compilée par le même compilateur, mais je dois également rendre la bibliothèque compatible avec d’autres compilateurs / langages.
S’il vous plaît quelqu’un a une suggestion sur la façon de résoudre ce problème?
EDIT: J’ai essayé de remplacer l’option -static-libstdc++ -static-libgcc
par les options -static-libstdc++ -static-libgcc
. Maintenant, lorsque je supprime -static-libgcc
, la gestion des exceptions fonctionne correctement.
Donc, mon problème est lié à la liaison statique de libgcc, mais je n’arrive toujours pas à comprendre pourquoi. Des idées?
EDIT2: Lorsque je débogue mon DLL, il appelle la fonction _Unwind_RaiseException
incorporée dans la DLL. Cela ressemble à une sorte d’incompatibilité ABI … Ici, les gens ont un problème similaire: les exceptions C ++ et la section ELF .eh_frame
Klasyc