@Carl: если есть что-то большее, чем одно двоичное приложение, то есть компонент. DLL (Dynamic Link Library) - это компонент, похожий на Shared Object в Linux. Понимаете ли вы это или нет, это компонент.

меня немного раздражал сбой при использовании библиотек DLL, скомпилированных с GCC под Cygwin. По сути, как только вы запускаете отладчик, вы можете оказаться в ловушке отладки, вызванной тем, что RtlFreeHeap () получает адрес чего-то, что не было выделено.

Этоизвестная ошибка с GCC 3.4 на Cygwin. Ситуация возникает из-за того, что библиотека libstdc ++ включает «умную» оптимизацию для пустых строк. Я избавляю вас от деталей (см. Ссылки в этом посте), но всякий раз, когда вы выделяете память в одной DLL для объекта std :: string, который «принадлежит» другой DLL, вы в конечном итоге выделяете одну кучу для освобождения, полученную из еще одна куча. СледовательноSIGTRAP в RtlFreeHeap ().

Есть другие проблемы, о которых сообщают, когда исключения брошены через границы DLL.

Это делает GCC 3.4 для Windows неприемлемым решением, как только ваш проект основан на DLL и STL. У меня есть несколько вариантов, чтобы пройти мимо этой опции, многие из которых очень трудоемки и / или раздражают:

Я могупатч мой libstdc ++ или жеперестройте его с помощью --enable-полностью динамической строки опция конфигурацииВместо этого я могу использовать статические библиотеки, что увеличивает время моей ссылки

Я не могу (пока) переключиться на другой компилятор из-за некоторых других инструментов, которые я использую. Комментарии, которые я нахожу от некоторых людей из GCC, таковы: «об этом почти никогда не сообщают, так что, вероятно, это не проблема», что раздражает меня еще больше.

У кого-нибудь есть новости по этому поводу? Я не могу найти четкого объявления о том, что это было исправлено (ошибка все еще помечена как «назначенная»), за исключением одного комментария кGNU Radio трекер ошибок.

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос