【问题标题】:Developing statically linked Qt applications [duplicate]开发静态链接的 Qt 应用程序 [重复]
【发布时间】:2014-08-12 08:58:10
【问题描述】:

我希望我的 Qt 应用程序能够运行,而不管 Qt 特定的 DLL。为此,我应该静态链接可执行文件。然而,这需要 Qt 本身的“静态”安装。

这就是我卡住的地方。我浏览了几十个不同的教程页面,但它们要么与我的设置不兼容,要么写得不好,要么就是完全错误。

这是我的情况:

  • Win 7,32 位
  • 我已经安装了 Qt(MSVC 2013 版本),在此处下载:http://qt-project.org/downloads(Qt 5.3.1 for Windows 32-bit (VS 2013, 559 MB))
  • QtCreator 工作正常,我可以开发 Qt 应用程序,但如前所述,它们是动态链接的
  • 可能没关系,但我有 Visual Studio 插件版本 1.2.3
  • 前段时间我也手动安装了 MinGW(不使用 Qt 安装程序)


同样,我的目标如下:使用 QtCreator 编译不需要 Qt DLL 即可运行的静态链接 exe。

谁能推荐一个描述我应该采取的步骤的教程/维基页面?

【问题讨论】:

  • 另一个静态链接的 Qt 问题。您没有通过第一个先决条件:Qt 的静态版本。与其下载和安装 Qt,不如下载源代码并使用与您的应用程序兼容的编译器(即 msvc2013)和适当的标志进行编译。至少 -static 应该在配置中。
  • 我知道这个问题已被问过很多次,但正如我的问题中所述,这些解决方案对我不起作用。我只是在寻求一些特定于平台的建议。据说已经有我答案的问题实际上没有,我以前见过。
  • 您能具体说明它们与您的设置不兼容的原因吗?该 wiki 拥有一切,甚至是您可以复制、粘贴和执行的环境脚本。
  • @UmNyobe 我之前尝试过那个脚本,PowerShell 给了我奇怪的错误信息,我查看了它,发现这是一个在某些页面中模糊描述的罕见问题。我很惊讶像我这样的 QT 新手要实现像编译独立 EXE 一样基本和初级的东西是多么困难。我终于设法用 MinGW 编译了我自己的版本,但在解决另外两个错误之前,幸运的是,这里描述了 @stackoverflow。
  • 绝大多数人使用从网站下载的动态版本并且可以接受。 It is very hard to distribute a static library 在 Windows 上。更少提供静态库的可移植性。

标签: c++ qt visual-c++


【解决方案1】:

您需要的是可以静态链接且不是 DLL 存根的 Qt-Lib。我在现场通过谷歌搜索找到了一些参考资料:

How to build a static Qt version for Windows with GCC

Building static libraries

两者都使用 GCC,但应该也可以使用 MSVC 构建。

【讨论】:

  • 关于 SO 的问题确实有数千个。
  • 只要我的回答没有错,最好不要投反对票。
  • 我投了反对票,因为 OP 说他的问题是不同的,而它是一个非常标准的设置,并且有多个问题可以解决这个问题。此外,您刚刚在“现场”发布了与 GCC 相关的链接。 “MSVC 应该可以” 不是正确答案恕我直言。
【解决方案2】:

我终于想通了,它确实做到了,但是,我花了一整天的时间。

Qt 5.2.1 在构建源代码时充满了错误(或者我在某处读过)。我有多个编译问题,其中大部分在互联网上挖掘了几分钟后可以修复(编辑各种标题文件,篡改宏),但在我的 Compaq 上尝试编译时间超过 2 小时并希望它工作量太大了。

幸运的是,我偶然发现了使用 4.8.6 的建议。嗯,我下载了那个版本,用win32-msvc2013编译它,添加到QtCreator,它工作正常。

注意:编译 4.8.6 时,GCC 可能会因为 off64_t 未定义而失败。这似乎是一个 MinGW 错误,与 Qt 无关。此处描述了问题和解决方案:Static compilation of Qt 5 fails under mingw with reference to off64_t

我必须说,我真的不明白这种情况。 Qt 是一个非常强大和流行的框架。能够开发不需要用户安装Windows以外的任何东西的独立、独立的exe是一项基本要求,应该是小孩子的游戏,但它既费时又困难。

我首先提出这个问题的原因是我找到的所有页面(这里建议作为答案)似乎都不适合我。

【讨论】:

  • Qt 5.2.1 哪里失败了?它可能对其他有同样问题的人有用。到现在你还没有描述它。
  • @UmNyobe 好点。我在帖子中添加了解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-13
相关资源
最近更新 更多