【问题标题】:Applications works while debugging, but doesn't work when "released"应用程序在调试时工作,但在“发布”时不工作
【发布时间】:2013-02-12 03:47:50
【问题描述】:

所以,我刚刚做了一个标准的QtQuick 2 应用程序,它有默认的RecangleTextMouseArea。所以,我只是尝试在发布模式下编译应用程序,看看它会生成什么文件,然后我尝试打开应用程序,结果发生了:

当我调整它的大小时,我可以看到空白:

但是在调试中一切正常:

我正在使用 Qt 5.0.1 和 QtQuick2

更新

因此,通过Dependency Walker 运行它后,似乎缺少三个文件:qt5quick.dllqt5gui.dllqt5core.dll我必须从某个地方手动添加它们吗?

当前目录结构为:

`test-build-Desktop_Qt_5_0_1_MSVC2010_32bit-Release/release
|+qml
 |+test
  |-main.qml
|-main.obj
|-moc_qtquick2applicationviewer.cpp
|-moc_qtquick2applicationviewer.obj
|-qtquick2applicationviewer.obj
|-test.exe
|-test.exe.embed.manifest

注意:我按照Nemanja Boric's answer 中的建议从父目录粘贴了qml 目录,但这并没有解决问题! :(

另外,我的印象是,没有任何源代码(可能除了 JavaScript)不会公开随应用程序一起分发,而是以某种方式编译或打包在应用程序中(注意 @ 987654334@文件和qml目录)?

更新 2

从 Qt 5 Creator 内部运行时,应用程序运行良好:

Starting [...]\test-build-Desktop_Qt_5_0_1_MSVC2010_32bit-Release\release\test.exe...
QOpenGLShader::link: "(41,18): warning X3206: implicit truncation of vector type

" 
[...]\test-build-Desktop_Qt_5_0_1_MSVC2010_32bit-Release\release\test.exe exited with code 0

嗯,除了那个尴尬的警告......

【问题讨论】:

  • 可能有一些未初始化的变量或缓冲区溢出。如果您使用的是 Linux,请在上面安装 valgrind。
  • 运行 test.exe 时问题是否相同,还是现在报告缺少 dll 问题?
  • @NemanjaBoric 不,它实际上只是 启动 并且看起来像第二张图片。这毫无意义……
  • 你确定你运行的是正确的版本(我假设你是,但我看到可执行文件的名称与清单文件不同,所以它可能是一些旧文件?)
  • facepalm 不,我正在阅读一些名为“thepalace”的古老聊天内容,只是不假思索地输入了它,哈哈。其实是test.exe.embed.manifest

标签: qt qml qt5 qtquick2


【解决方案1】:

您需要将 qml 文件复制到当前目录。当您使用 QtCreator 创建发布应用程序时,您将具有以下目录结构(或类似的东西):

example-build-Desktop_Qt_5_0_1_MSVC2010_32bit-Release
  |-     debug
  |-     qml
  |-     release // application executable is here

您需要做的是将qml文件夹复制到与您的可执行发布文件相同的目录中(只需将qml文件夹复制到release文件夹中)。

关于 dll 文件 - 您可以从 QtInstallDir/bin 文件夹手动复制它们,或者您可以将该目录添加到 PATH,如果您在该机器上进行开发 - 这可能会更容易。

不需要发布cpp文件,但需要发布qml文件。你可以做什么,通过我从来没有成功,但似乎有可能将 qml 文件捆绑到资源文件中,并从资源中加载它,但这也可以很容易地提取 - 所以 - 不要放您在 qml 文件中的逻辑或机密信息

另外,您需要将所有需要的 dll 文件复制到带有 exe 的目录中:qt5quick.dll、qt5gui.dll、qt5core.dll 和 libEGL.dll。

【讨论】:

  • 啊,这完全没有任何作用。 :(
  • @starship 你是如何运行程序的?它在这里工作得很好。不要复制 qml 文件夹的内容,而是复制文件夹本身,并从发布目录运行 exe 文件。
  • 我也必须将libEGL.dll 复制到文件夹中。不过,Dependency Walker 没有提到它。所以,我想只需将其添加到您的答案中,以便我可以接受! :D
  • @starship 我会的,太好了:)。
猜你喜欢
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-31
  • 1970-01-01
  • 2021-03-02
  • 1970-01-01
相关资源
最近更新 更多