从第三方DLL调用Qt中的函数在调试模式下工作,在发布时崩溃

时间:2011-06-08 08:39:44

标签: qt dll release

我使用第三方DLL(FTD2xx)与外部设备通信。使用Qt4,在调试模式下一切正常,但在成功完成一个被调用的函数后,该版本会以静默方式崩溃。它似乎在返回时崩溃,但是如果我在函数末尾向控制台(使用qDebug)写了一些东西,有时它不会在那里崩溃,而是在几个或几十行之后崩溃。

我怀疑一个没有正确清理的堆栈,调试版本可以存活什么,但是发布会阻塞它。有人遇到过类似的问题吗? DLL本身无法更改,因为源不可用。

2 个答案:

答案 0 :(得分:0)

似乎优化级别的降低是唯一的方法。 DLL本身可能有问题,因为如果打开优化,除了从该DLL调用单个函数之外什么都不做的程序会以相同的方式崩溃。

幸运的是,优化级别变化所损失的大小和速度可以忽略不计。

编辑:对于在Qt 5.0或更高版本上遇到类似问题的任何人:如果更改优化级别(例如,更改为QMAKE_CXXFLAGS_RELEASE = -O0),通常只能重建应用程序。需要完整的“全部清洁”。

答案 1 :(得分:-1)

警告 - EPANET库不是线程安全的,它包含许多全局变量。

您是否从不同的线程调用该库的两个方法?