【问题标题】:Qt (MSVC2010) - dependencies only found on machine where Qt is installedQt (MSVC2010) - 仅在安装 Qt 的机器上找到依赖项
【发布时间】:2015-08-20 16:02:29
【问题描述】:

完整故事:有人在这里遇到完全相同的问题:https://forum.qt.io/topic/50118/windows-qt-deployment-not-working-vs2010-qt-5-4-0

短篇故事和问题:

在SDK的安装过程中Qt-Installer有什么设置吗?我的应用程序仅适用于安装了 Qt 的机器(C:/Program Files/Qt)。我检查了环境变量,但没有任何与 Qt 相关的内容。

任何帮助表示赞赏。

【问题讨论】:

  • 是的,您的环境中没有这些路径。瓦尔斯。但是您可以在 .exe 和 .dll 文件中找到这些路径(Windows 编译的结果)。通常的 Qt 程序知道开发者计算机上所有 Qt 的 .dll 文件的完整路径。
  • @Ilya 你错了。程序不知道。此路径存储在Qt5Core.dll 中。因此,只有当Qt5Core.dll 被解析时,应用程序才知道开发人员机器上的路径。否则 - 不是。
  • 有没有办法在 qt5core.dll 中定义这个路径?以及 qt5core.dll 预编译时如何知道路径?
  • 这将解释为什么即使将所有 dll 文件都复制到同一目录,exe 也不会执行?

标签: c++ qt


【解决方案1】:

Qt-Installer在安装过程中有没有设置什么 SDK?

是的。在安装过程中,Qt 的原始路径被硬编码为 QtXXX.dll。所以,在某些情况下,有必要使用qt.conf文件。

一些链接,阅读更多:

Reason of your problem

Official documentation for qt.conf

Deployment of Qt applications

【讨论】:

  • 实际上间接解决了我的问题,知道路径是硬编码的!谢谢!
【解决方案2】:

嗯,有两种方法:一种简单的方法,一种正确的方法。最简单的方法是将应用程序所需的所有 dll(即当您尝试启动应用程序时出现在错误消息中的所有 dll)复制到应用程序可执行文件所在的同一文件夹中。应该可以,但是太丑了。

正确的方法是制作 Qt 的静态构建,并使用它来编译您的应用程序。以这种方式构建的静态应用程序将是可移植的——您将能够在任何机器上启动它。在文档herehere 中描述了生成Qt 静态版本的过程(基本上它只需要使用-static 标志编译Qt),以及其他一些SO questions

【讨论】:

  • 但是,如果 OP 正在使用静态构建(而不是商业版本),则静态构建不符合 LGPL 许可。
  • @Melebius,如果OP的应用程序是开源的,我认为它也可以使用?不管怎样,如果他不想要,他可以随时复制dll
  • 我认为它必须是 GPL 而不仅仅是 open-source 一个更广泛的术语。
  • 我已将 dll 复制到 C:\Qt\5.4\msvc2010_opengl\plugins 但没有成功
【解决方案3】:

Qt(在 Windows 上)安装它的 DLL 并将包含它们的文件夹添加到 PATH 变量中。您可以在 LGPL 的基础上提供 DLL 二进制文件以及您的应用程序。

【讨论】:

  • 我检查了PATH变量,没有引用Qt
  • DLL 不是安装在像Windows\System32 这样的已经存在的文件夹中吗?这样 Qt 安装程序就不需要触摸PATH。我使用的是 Qt 4.8,他们可能从那个版本开始改变了它……
猜你喜欢
  • 2017-05-26
  • 1970-01-01
  • 2013-02-27
  • 2014-10-02
  • 2011-01-20
  • 2014-04-12
  • 1970-01-01
  • 2016-08-17
  • 2019-05-10
相关资源
最近更新 更多