我想使用Linux x86_64主机为Windows x86_64目标交叉编译Qt库(最终是我的应用程序).我觉得我很接近,但我可能对这个过程的某些部分有一个根本性的误解.

我首先在我的Fedora机器上安装了所有的mingw软件包,然后修改了win32-g++QMake.conf文件以适应我的环境.然而,我似乎被一些似乎显而易见的Qt配置选项困住了:-platform-xplatform.Qt文档说明-platform应该是主Rack 构(您正在编译的地方),-xplatform应该是您希望部署的目标平台.在我的例子中,我设置了-platform linux-g++-64-xplatform linux-win32-g++,其中linux-win32-g++是我修改后的win32-g++配置.

我的问题是,在使用这些选项执行configure之后,我看到它调用了系统的编译器,而不是交叉编译器(x86_64-w64-mingw32-gcc).如果我省略-xplatform选项并将-platform设置为我的目标规范(linux-win32-g++),它会调用交叉编译器,但在发现一些与Unix相关的函数未定义时会出现错误.

下面是我最近一次try 的一些结果:http://pastebin.com/QCpKSNev.

问题:

  1. 当从Linux主机交叉编译Qt for Windows之类的东西时,是否应该调用本机编译器ever?也就是说,在交叉编译过程中,我们不应该使用交叉编译器吗?当我指定-xplatform选项时,我不明白为什么Qt的configure脚本试图调用我系统的本机编译器.

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

  3. 一般来说,除了在我的qmake中指定交叉编译器之外.我还需要考虑什么呢?

推荐答案

只用M cross environment (MXE).它消除了整个过程中的痛苦:

  • 了解了:

    $ git clone https://github.com/mxe/mxe.git
    
  • 安装build dependencies

  • 为Windows构建Qt、其依赖项和交叉构建工具;

    $ cd mxe && make qt
    
  • 转到应用程序目录,将交叉构建工具添加到PATH环境变量:

    $ export PATH=<mxe root>/usr/bin:$PATH
    
  • 运行Qt Makefile生成器工具,然后生成:

    $ <mxe root>/usr/i686-pc-mingw32/qt/bin/qmake && make
    
  • 你应该在/发布目录:

    $ wine release/foo.exe
    

Some notes:

  • 使用MXE存储库的主分支;它似乎得到了开发团队更多的喜爱.

  • 输出是32位静态二进制文件,可以在64位Windows上正常工作.

Linux相关问答推荐

GO:当使用NewManager调用创建cgroup时,权限被拒绝

PERF显示不应该执行指令的内核的用户空间周期

如何使用适用于 Linux 的 Dockerized SQL Server 设置 MSDTC

为什么rsp寄存器从0x7FFFFFFFDFD0开始

$RANDOM 变量在输出通过管道后似乎没有改变

Linux 如何使用 PCID 的值?

文件未在脚本中使用 cp 命令复制到 Docker 容器中

查找在特定日期从特定机器登录的所有用户

使用 Dockerfile RUN 执行某些操作但忽略错误

如何判断 Linux 机器是否支持 AVX/AVX2 指令?

如何安装脚本以从命令行的任何位置运行?

DMA 和内存映射 IO 有什么区别?

内核是如何工作的?

如何优雅地退出 X11 事件循环?

让 Tk 看起来像一个原生 Linux 应用程序

linux中netstat和ss的区别?

`os.symlink` 与 `ln -s`

Postgresql -bash:psql:找不到命令

Linux 的文本编辑器(除了 Vi)?

在linux中将制表符分隔的文件转换为csv的最快方法