在Linux上构建Qt 5,用于Windows

63
我想将我的Qt 4应用迁移到使用Qt 5。这些说明失败了,因为MXE构建Qt 5时存在一些差异,包括它使用模块化的Qt tarballs,而不是一个大的tarball。
4个回答

110

以下是完整的说明:

  • 获取它:

    git clone https://github.com/mxe/mxe.git
    
  • 安装构建依赖项

  • 为Windows构建Qt 5:

  • cd mxe && make qtbase
    

    这将首先构建其依赖项和交叉编译工具;在拥有良好的网络连接的快速计算机上,此过程应该不到一个小时。

    由于 Qt 5 的新模块化特性,各种主要的 Qt 组件现在位于不同的 tarball 中。上面选择的 qtbase 应该为您提供足够运行普通 GUI 应用程序所需的功能,这也是我自己(较小)应用程序所需要的所有功能。

    如果您想要构建 Qt 5 的全部内容,则需要运行 make qt5(而不是 make qtbase)。请注意,这将需要更长时间才能完成,因此请确保您需要额外的功能。

  • 进入您的应用程序目录,并运行 Qt Makefile 生成工具:

  • <mxe root>/usr/bin/i686-w64-mingw32.static-qmake-qt5
    
  • 构建你的项目:

    make
    
    你应该在./release目录中找到二进制文件:
  • wine release/foo.exe
    

注意事项:

  • 该代码已在我使用的64位Debian 8和Windows系统上测试过。

  • 生成的是32位静态可执行文件,可以在64位Windows系统上正常工作。

  • 如果您需要64位可执行文件,请使用以下命令构建Qt:

make MXE_TARGETS=x86_64-w64-mingw32.static qtbase

默认的MXE_TARGETS值为i686-w64-mingw32.static


1
你找到答案了吗?如果没有,我不知道,或许应该将其作为一个独立的问题来问。 - tshepang
1
@MiyazawaKenji MSYS2看起来非常有前途,但它不适合这个特定的问题,因为它只能在Windows上运行,而不能在Linux上运行。请记住,MXE是交叉编译库。 - Nathan Osman
1
@relascope 它是静态构建的,因此没有 DLL 的问题;您只需将一个可执行文件放在任何地方即可部署。 - tshepang
9
请不要忘记导出路径 $ export PATH=<mxe root>/usr/bin:$PATH - Amit Tomar
2
几年过去了,你的回答仍然很有价值,是一份及时之赐。我刚刚测试了MXE在WSL上的使用,使用qtcreator创建了静态链接的Windows可执行文件和非静态链接的Linux可执行文件。谢谢! - Waleed Hamra
显示剩余6条评论

8

git checkout 命令不正确。现在你必须获取他们的稳定分支,否则构建将失败。

git clone https://github.com/mxe/mxe.git

应该是...

git clone -b stable https://github.com/mxe/mxe.git

单独执行这条命令解决了我在构建qtbase时遇到的所有问题,但在完成后没有留下qt文件夹。然后,qt5目标会出现模糊的错误。删除文件夹,检出稳定版本就可以顺利地解决问题。

2
我猜这只是一个暂时性的问题... master 现在可以工作了,而且我实际上不记得它失败的时间,尽管我大多数情况下都是构建 qtbase,而不是更大的 qt5 - tshepang
1
git clone -b stable https://github.com/mxe/mxe.git 对我来说无法工作。 - j35t3r
4
我认为“稳定”分支不再存在。 - Marcus

1

对于那些想要直接获取GCC10 64位编译的Qt5(例如用于文件系统库)的人,以下是完整的说明:

获取它:

git clone https://github.com/mxe/mxe.git

安装构建依赖项

使用启用了gcc10 64位插件的版本构建Windows的Qt 5:

cd mxe && make MXE_TARGETS=x86_64-w64-mingw32.shared MXE_PLUGIN_DIRS=plugins/gcc10 qt5

构建2-3小时后,您可以构建您的应用程序(在您的.pro目录中):

<mxe root>/usr/x86_64-w64-mingw32.shared/qt5/bin/qmake

导出编译器的路径并构建您的项目:

export PATH=<mxe root>/usr/bin:$PATH
make

你应该在./release目录下找到二进制文件,并使用wine(或wine64)启动它:

wine foo.exe

我不是很清楚为什么,但我需要将MXE编译器目录添加到Wine路径中,因为它找不到DLL文件:

WINEPATH="<mxe root>/usr/x86_64-w64-mingw32.shared/bin/" wine64 foo.exe 

0
如果你尝试这样做,对我来说是有效的!
su
mv mxe /opt/mxe
cd /opt/mxe && make

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接