linux - 如何配置 Qt 以实现从 Linux 到 Windows 目标的交叉编译?

我想使用 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 .

问题:

  1. 当从 Linux 主机交叉编译像 Qt for Windows 这样的东西时,是否应该调用原生编译器曾经?也就是说,在交叉编译过程中,我们不应该使用交叉编译器吗?当我指定 -xplatform 选项时,我不明白为什么 Qt 的配置脚本会尝试调用我系统的 native 编译器。

  2. 如果我使用 mingw 交叉编译器,我什么时候需要处理 specs 文件? GCC 的规范文件对我来说仍然是一个谜,所以我想知道这里的一些背景是否会对我有所帮助。

  3. 一般来说,除了在我的 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/

相关文章:

python - 使用 csv 模块从 csv 文件中读取特定列?

python - 如何在 Django 模板中显示当前年份?

c - 为什么 malloc 将 gcc 中的值初始化为 0?

linux - 使用 bash 脚本自动化远程登录 session

python - 使用 python 的 eval() 与 ast.literal_eval()

regex - 更改文件夹中的所有匹配项

linux - 在运行时编辑 shell 脚本

linux - 如何 cat <> 包含代码的文件?

python - 列表列表到 numpy 数组中

python - Pandas 中的 join 和 merge 有什么区别?