Exceptions C ++ dans les DLL (MinGW)

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