Вызов функций в Qt из сторонней DLL работает в режиме отладки, вылетает при выпуске - PullRequest
0 голосов
/ 08 июня 2011

Я использую стороннюю DLL (FTD2xx) для связи с внешним устройством.Используя Qt4, в режиме отладки все работает нормально, но после успешного завершения вызванной функции релиз вылетает молча.Кажется, что происходит сбой при возврате, но если я что-то записываю в консоль (с qDebug) в конце функции, иногда это происходит не там, а через несколько или несколько десятков строк.

IПодозреваю, что неправильно очищенный стек, что может выжить отладочная сборка, но релиз душит его.Кто-нибудь сталкивался с подобной проблемой?Сама DLL не может быть изменена, так как источник недоступен.

Ответы [ 2 ]

0 голосов
/ 25 декабря 2012

Будьте осторожны - библиотека EPANET не является поточно-ориентированной, она содержит много глобальных переменных.

Вы вызываете два метода этой библиотеки из разных потоков?

0 голосов
/ 20 июня 2011

Кажется, что снижение уровня оптимизации было единственным выходом.Сама DLL может иметь проблемы, так как программа, которая ничего не делает, но вызывает одну функцию из этой DLL, аварийно завершает работу, если включена оптимизация.

К счастью, размер и скорость теряются из-за изменения уровня оптимизациипренебрежимо мал.

Редактировать : для тех, у кого похожие проблемы на Qt 5.0 или выше: если вы измените уровень оптимизации (например, на QMAKE_CXXFLAGS_RELEASE = -O0), обычно недостаточно простопересобрать приложение.Требуется полное «очистить все».

...