使用 MinGW 静态构建 Qt 5.7 时,如何解决此构建错误?

Posted

技术标签:

【中文标题】使用 MinGW 静态构建 Qt 5.7 时,如何解决此构建错误?【英文标题】:How can I fix this build error when building Qt 5.7 statically with MinGW? 【发布时间】:2016-07-22 13:55:53 【问题描述】:

当我尝试静态编译 Qt 5.7 以获得一个独立的 Windows 部署应用程序时,如提及 here 所述,我收到以下错误:

C:\Qt\Qt5.7.0\5.7\Src\qtbase/qmake/library/qmakebuiltins.cpp:在成员函数'QByteArray QMakeEvaluator::getCommandOutput(const QString&) const'中

C:\Qt\Qt5.7.0\5.7\Src\qtbase/qmake/library/qmakebuiltins.cpp:419:94: 错误:'_popen' 未在此范围内声明 + QLatin1String(" && ") + args).toLocal8Bit().constData(), "r"))

C:\Qt\Qt5.7.0\5.7\Src\qtbase/qmake/library/qmakebuiltins.cpp:427:23: 错误:'_pclose' 未在此范围内声明 QT_PCLOSE(proc);

Makefile:204: 目标“qmakebuiltins.o”的配方失败 mingw32-make: *** [qmakebuiltins.o] 错误 1 构建 qmake 失败,返回码 2

我的目标是使最终版本独立并优化大小(仅在库中使用的必要符号),也在我提供的链接中我没有看到 MinGw 提及,我没有 @987654327 @(并且不想得到它)。

【问题讨论】:

请注意,MinGW 工具目前无法清除目标文件中未使用的部分,请参阅this bug report。不过,静态链接和剥离大部分内容应该仍然是可能的。 我还建议您尝试MSYS2 及其 qt5-static 包,它提供了一个现成的静态构建 Qt,省去了构建它的麻烦。 @rubenvb 我尽量避免非官方发布,因为它总是伴随着兼容性问题或项目放弃。 所以您自己构建了一个非官方版本以避免这些问题?构建脚本是可用的,所以原则上你可以自己构建它,见here。这不是最简洁的示例,但是,这是因为 Qt 在正常配置中构建起来并不那么快速和容易。 【参考方案1】:

它是开源的。我们所有的食谱和补丁都已发布。 MSYS2 有不被遗弃软件的记录,但如果你找到我们可以做得更好的地方,请帮忙。 MSYS2 与 MSYS2 的其余部分高度兼容。我们不能承诺更多。

【讨论】:

以上是关于使用 MinGW 静态构建 Qt 5.7 时,如何解决此构建错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Qt Creator 中使用 MinGW-64

QT 5.7   mingw 不支持webkit

使用 PostgreSQL 编译静态 Qt 5.10.0 时出错

Qt 5.10.1 MinGW .. 如何链接 dll

如何在VS2012下静态构建Qt 4.8/5.2,使用静态MSVC运行时,支持Windows XP?

Qt 静态编译(5.15.2 MinGW 32-bit)