当Qt5Core.dll在app目录中时,QT 5.2 app无法启动(错误分配错误)

时间:2014-03-05 12:35:04

标签: windows qt

我的机器上有一个有趣的问题 Windows 7 x64,使用QT 5.2进行GUI

我无法启动应用程序我总是收到错误

Error: Exception:"bad allocation"

首先我认为我有一个破坏的dll,所以通过一些试验和错误我找到了一个解决方案: 我通过环境路径添加QT5Core.dll,而不是直接添加到app文件夹。然后程序工作。如果我将dll复制回应用程序文件夹,与以前一样的问题!?!?!?1

我真的很困惑,因为错误只发生在我的机器上? 调试并没有真正帮助, 在代码中,此处发生错误:

MyApplication::MYApplication(int argc, char** argv, int version)
: QApplication(argc, argv, version)  // <<< this call fails!
{    }
有人可以帮帮我吗? 为什么qt5core.dll的位置有问题?!?!?

更新

我使用了depends的profiling函数,发现了以下行为: 的失败

  

从&gt;调用的GetProcAddress(0x76800000 [c:\ windows \ syswow64 \ KERNEL32.DLL],“CreateSymbolicLinkW”)地址为0x00FF2877的“dirone \ xxxx.EXE”并返回0x7688CCE9。    第一次机会异常0xE06D7363(Microsoft C ++ Exception)发生在地址0x765CC41F的“c:\ windows \ syswow64 \ KERNELBASE.DLL”中。   例外:“分配不好”

工作

  

LoadLibraryW(“C:\ BuildPackages \ QT \ plugins \ platforms \ qwindows.dll”)从地址0x66AA5154的“dirtwo \ QT5CORE.DLL”调用。   在地址加载“c:\ buildpackages \ qt \ plugins \ platforms \ QWINDOWS.DLL”   0x0F380000。成功挂钩模块。

以某种方式将qwindows.dll的路径硬编码到dll中(此目录没有环境路径) 如果我重命名qwindows.dll或删除它,启动会再次失败。

但qwindows.dll与我们的产品是bundeld。它位于子目录./platforms/ 和文件是相同的(差异返回相等)

有人知道我接下来应该尝试什么?

3 个答案:

答案 0 :(得分:2)

检查您是否已经有一些与qt相关的环境变量。 崩溃通常是由于此,首先删除那些环境变量。检查是否有任何其他qt安装库。 如果你能发布cal堆栈会更好。

答案 1 :(得分:0)

需要一些其他dll驻留在qt5core.dll的目录中。将此路径添加到搜索路径时,将找到dll。当您只是复制DLL时,无法找到这些dll。您可以使用depends工具检查依赖关系。

其他dll的候选人是:

icuin51.dll和icuuc51.dll

答案 2 :(得分:0)

发现问题: 环境变量:

QT_QPA_PLATFORM_PLUGIN_PATH=C:\BuildPackages\QT\plugins\platforms

设置为路径。如果删除此变量,一切正常!