3

我已经使用独立版本的 Qt (mingw) 构建了我的第一个 c++ GUI 应用程序,并且运行良好。我在另一台计算机上尝试过,它立即因 Visual c++ 运行时库错误而崩溃。

我实际上测试了将整个 bin 文件夹复制到另一台 PC 并从那里运行应用程序,仍然相同。什么可能导致问题?

额外细节:

我安装了 Visual C++ 2010 Redistributable,我也复制了 d3dcompiler_XX.dll。我从 Qt\Qt5.0.1\5.0.1\mingw47_32\bin 得到了所有的 dll。

我没有链接任何东西,而且我对一般链接的经验为零。我阅读了几篇关于此的帖子,但他们没有提供任何解决方案,或者我无法理解的解决方案。调试模式也这样做。在我的 PC 上,它也在 Qt Creator 之外运行。

4

2 回答 2

1

如果您的 Qt-App 是使用 MinGW 动态构建的(即使用动态库),您需要来自 MinGW 的 dll(例如 libgcc_s_sjlj-1.dll、libstdc++-6.dll 等)。在 MinGW 安装目录中找到这些文件。(可能是你的 Qt 安装)

从在窗口上部署应用程序中检查“应用程序依赖项”

于 2013-04-08T08:00:11.950 回答
1

毕竟我无法让 MinGW 版本工作,即使我按照文档逐步部署,但我现在确实有一个工作应用程序。

问题的根源是Qt文件夹中的一些dll注册并且程序到达它们甚至很难它不在同一个文件夹中。我认为与文档中提到的相比,MinGW 版本需要更多的 dll,或者它可能只是我的 PC。

这是我所做的:

1、用Visual Studio编译器下载Qt creator,删除除源之外的所有内容并重建项目。

2,在项目文件的开头添加了这个:

QMAKE_LFAGS += -Wl,--repath=\\\$\$ORIGIN
QMAKE_LFAGS += -Wl,--repath=\\\$\$ORIGIN/lib
QMAKE_LFAGS += -Wl,--repath=\\\$\$ORIGIN/libs
QMAKE_RPATH=

这应该让应用程序在 . , ./lib, ./libs,但我认为它什么也没做,因为应用程序不会在 lib 文件夹中找到它们。

3,将这些dll复制到同一个文件夹中:(与文档相同)

D3DCompiler_43
icudt49
icuin49
icuuc49
libEGL
libGLESv2
Qt5Core
Qt5Gui
Qt5Widgets
Platforms (folder) containing qminimal and qwindows
msvcr100 and msvcp100

minGW 版本需要 LIBSTDC++-6、LIBGCC_S_DW2-1 和 MINGWM10,但即使有了这些,它对我也不起作用。

一般提示:

  • 请注意,如果未找到其中之一,mingw 会抛出错误,而 VS 版本什么也不做(立即终止,没有任何消息。)
  • The most comfortable solution of testing the dependences is renaming the Qt folder, so that your app will not find it, this way you don't need a second computer to test it, nor unistalling the app like the documentation suggests.
  • If you still have problems you can solve this the brute force way, like I did, by making a copy of the Qt folder, and deleting the elements one by one in the original one, to see what your program depends on. Unfortunately even the dependency checker does not mention some of them.

I wish you all happy coding, and more successful troubleshooting with this post.

于 2013-04-08T17:11:27.440 回答