【问题标题】:Compiling a static QT application on Windows在 Windows 上编译静态 QT 应用程序
【发布时间】:2012-01-07 06:14:39
【问题描述】:

我是 QT 新手,我很享受这种体验,但我无法将 QT 库静态链接到输出二进制文件。当我在 QT 目录之外运行输出文件时,我得到The program can't start beacuse QtCored4.dll is missing。显然,QT 正在动态链接他们的库并请求一个我没有的 .dll。有没有办法将 QT 的库静态编译成静态二进制文件,所以不需要 QT 的 dll?我问这个是因为我的项目已经有多达 11 个 .dll,而且我真的很想减少必须与我的软件一起分发的文件数量。尺寸对我来说不是问题。谢谢。

我尝试将CONFIG += static 添加到.pro 文件中,但无济于事。

【问题讨论】:

    标签: c++ qt static-libraries dll


    【解决方案1】:

    首先,除非您购买了商业许可证,否则您不能静态链接 Qt。这样做会使您违反分发非商业版本的 LGPL 许可。我感受到你的痛苦,我的软件有很多很多的 DLL。

    谢天谢地,如果您使用安装程序,您可能确实拥有 DLL:您不需要从源代码构建,这应该是自动完成的。您可以在 Qt\Version\bin 中找到它们,其中 Qt 是您安装 Qt 的目录,version 是您安装的 Qt 版本。例如,我在 G:\Libraries\Qt\4.7.1\bin 中找到。

    但是,我确实遇到了一些问题,即没有构建 DLL 之一——一个用于与 OpenGL 一起工作的 DLL——并为此执行了重建。当我切换 Visual Studio 的版本时,我也这样做了。我觉得能这样做很方便,很简单,在Qt目录下打开一个终端,执行:

    configure.exe -platform XXX'
    

    其中 XXX 表示您要执行的构建类型。有效选项包括 win32-msvc2005、win32-msvc2008、win32-msvc2010。所以我使用:

    configure.exe -platform win32-msvc2010'
    

    其他选项详解here。如果您已下载源代码,则这些说明适用,但是您可能必须将当前目录添加到路径变量,如下所示:

    set PATH=%cd%\bin;%PATH%
    

    整个过程大约需要一个小时。

    【讨论】:

    • 我不知道 LGPL 限制静态链接,这进一步加剧了我对 GPL\LGPL 许可证的仇恨。除了愤怒之外,我会像你说的那样包括所有的 dll。这可能看起来很愚蠢,但有没有办法将所有 QT dll 合并为一个?
    • @user99545 这很痛苦,但这是我们免费使用数千小时工作所付出的代价:)。唯一愚蠢的问题是那些你不问的问题,尽管将它们合二为一将是一个该死的大 DLL!我很确定它没有完成,也不可能。我通常将我所有的 DLL 放在一个 DLL 目录中。当我需要查找正在使用的内容时,我使用Dependancy Walker 修剪列表以在分发前删除未使用的 DLL。
    • 不错的提示,工具链接+1。
    • @user99545 不客气。另一个您可能感兴趣的处理 DLL 的工具是 DLL Export Viewer,它可以让您查看从 DLL 中导出了哪些函数:如果您像插件一样动态加载它们,这非常方便,而且它们会让您感到痛苦。
    • “首先,除非你购买了商业许可证,否则你不能静态链接 Qt。” 这并不完全正确。您必须使最终用户能够重新链接到另一个版本的 Qt,例如通过提供目标文件。
    【解决方案2】:

    需要下载QT的源码包并编译。这需要一些时间,但并不复杂。

    • 下载并解压 QT 源代码
    • 启动编译器外壳(Visual Studio 或 mingw)
    • 在QT源码目录中执行configure - 在此处添加静态编译标志
    • 执行 make (Visual Studio nmake)
    • 等待几个小时,具体取决于您的机器速度

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-29
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      相关资源
      最近更新 更多