Я пишу Windows DLL на C++. Эта библиотека имеет только интерфейс C и использует только стандартные библиотеки Windows, которые также имеют интерфейс C. Поэтому представляется мне безопасным статически связывать все библиотеки C++ с библиотекой, потому что я не зависим от версии C++ ABI при использовании только C-интерфейсов.Статическая ссылка libgcc на Windows DLL
К сожалению, когда я скомпилирую свою библиотеку с помощью -static-stdc++ -static-libgcc
, моя библиотека перестает обрабатывать исключения и когда генерируется какое-то исключение, DLL вызывает свою статически связанную функцию _Unwind_RaiseException
, которая прерывает все приложение.
Я думал, что это может быть поврежден libgtcc.a
, поэтому я попытался обновить свой компилятор. Но результат одинаковый с MinGW 4.8 и MinGW 6.3.
Пожалуйста, кто-нибудь может объяснить мне, что на самом деле происходит здесь?
Klasyc
Использование TDM-GCC. См. Краткое описание [здесь] (http://tdm-gcc.tdragon.net/quirks) – Ripi2
Или MinGW, который поддерживает SEH. – rustyx
@RustyX OP попробовал MinGW, который, как вы говорите, поддерживает SEH, но не если библиотеки статически связаны, а исключение выбрано через границу DLL. Это один из вопросов, который адресует TDM-GCC. MinGW отлично работает, если библиотеки времени выполнения динамически связаны (т. Е. В процессе есть только одна версия). –