我想使用 Linux x86_64 主机交叉编译 Windows x86_64 目标的 Qt 库(最终是我的应用程序)。我觉得我很接近,但我可能对这个过程的某些部分有根本的误解。
我首先在我的 Fedora 机器上安装所有 mingw 包,然后修改 win32-g++
qmake.conf 文件以适应我的环境。然而,我似乎被一些看似显而易见的 Qt 配置选项卡住了:-platform
和 -xplatform
。 Qt 文档说 -platform
应该是主机架构(您正在编译的地方), -xplatform
应该是您希望部署的目标平台。就我而言,我设置了 -platform linux-g++-64
和 -xplatform linux-win32-g++
其中 linux-win32-g++ 是我修改后的 win32-g++ 配置。
我的问题是,在使用这些选项执行配置后,我看到它调用了我系统的编译器而不是交叉编译器 (x86_64-w64-mingw32-gcc)。如果我省略了 -xplatform
选项并将 -platform
设置为我的目标规范 (linux-win32-g++),它会调用交叉编译器,但在找到一些 Unix 时会出错相关函数未定义。
这是我最近尝试的一些输出:http://pastebin.com/QCpKSNev .
问题:
当从 Linux 主机交叉编译像 Qt for Windows 这样的东西时,是否应该调用原生编译器曾经?也就是说,在交叉编译过程中,我们不应该只使用交叉编译器吗?当我指定 -xplatform
选项时,我不明白为什么 Qt 的配置脚本会尝试调用我系统的 native 编译器。
如果我使用 mingw 交叉编译器,我什么时候需要处理 specs 文件? GCC 的规范文件对我来说仍然是一个谜,所以我想知道这里的一些背景是否会对我有所帮助。
一般来说,除了在我的 qmake.conf 中指定交叉编译器之外,我还需要考虑什么?
最佳答案
只需使用 M cross environment (MXE) .它消除了整个过程的痛苦:
得到它:
$ git clone https://github.com/mxe/mxe.git
安装 build dependencies
为 Windows 构建 Qt、它的依赖项和交叉构建工具; 在具有良好互联网接入的快速机器上,这将需要大约一个小时; 下载约500MB:
$ cd mxe && make qt
转到您的应用目录,并将交叉构建工具添加到 PATH 环境变量中:
$ export PATH=<mxe root>/usr/bin:$PATH
运行 Qt Makefile 生成器工具然后构建:
$ <mxe root>/usr/i686-pc-mingw32/qt/bin/qmake && make
您应该在 ./release 目录中找到二进制文件:
$ wine release/foo.exe
一些注意事项:
使用 MXE 仓库的 master 分支;它似乎得到了开发团队更多的喜爱。
输出是 32 位静态二进制文件,在 64 位 Windows 上运行良好。
https://stackoverflow.com/questions/10934683/