当前位置: 首页 > 面试题库 >

如何配置Qt以便从Linux到Windows目标进行交叉编译?

濮阳默
2023-03-14
问题内容

我想使用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的克 是我的改性Win32的克 结构。

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

这是我最新尝试的一些输出:http :
//pastebin.com/QCpKSNev。

问题:

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

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

  3. 通常,除了在我的qmake.conf中指定交叉编译器之外,我还需要考虑什么?


问题答案:

只需使用M跨环境(MXE)。它消除了整个过程的痛苦:

  • 得到它:

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

  • 为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上很好地工作。



 类似资料:
  • 问题内容: 我已经安装在Windows机器上的Go 1.2,写了一个虚拟的程序和设置环境变量,并以“AMD64”及“LINUX”。 当我发出“ ”命令时,出现错误: 这是什么意思? 问题答案: 它告诉您需要先构建所有工具,然后才能使用它们。 如果您的Windows GOARCH是amd64,则可以通过运行以下小批处理程序来“构建”所有必需的工具: 如果成功,那么您应该能够执行您所描述的操作(只使用

  • 我试图遵循各种建议,但它们没有我的特定错误消息:crt2.o:crtexe.c:(.rdata$.refptr.__onexitend[.refptr.__onexitend]+0x0):未定义对`__onexitend'的引用collect2:error:ld返回1退出状态 希望得到一些东西,但它爆炸了。输出如下所示:/usr/bin/x86_64-w64-mingw32-ld://home/v

  • 问题内容: 基本上,我在Linux上进行开发时,尝试将最简单的代码编译到Windows。 我通过搜索互联网找到了这些命令: 可悲的是,它们都不起作用。它给我关于标准箱丢失的错误 有没有办法在Windows上运行的Linux上编译代码? 问题答案: Rust发行版仅提供主机系统的编译库。但是,根据Rust上Arch Linux的Wiki页面 ,您可以从系统目录中适当位置(位于或中,具体取决于Wind

  • 问题内容: 是否有用于从Linux到Windows交叉编译C ++应用程序的手册? 只是。我想要一些信息(链接,参考,示例…)来指导我做到这一点。 我什至不知道是否可能。 我的目标是在Linux上编译程序并获取一个可以在Windows下运行的.exe文件。 问题答案: 基础不太难: 替换为,或您的Linux发行版使用的任何格式。这将为Windows 生成一个。 一旦解决了这个问题,就可以使用aut

  • 问题内容: 到目前为止,我已经在ubuntu系统上安装了所有交叉编译软件包,但是遇到了问题,需要一些帮助。 这是我需要交叉编译的目标计算机。编译时应使用哪些标志? 问题答案: 给出以下列表, gcc-4.7-aarch64-linux-gnu-GNU C编译器 gcc-4.7-arm-linux-gnueabi-GNU C编译器 gcc-4.7-arm-linux-gnueabi-base-GCC

  • 我使用sshfs将目标设备的(Beaglebone Black,ARM arch)根安装到主机上的一个文件夹中,并尝试使用gcc的选项进行交叉编译。 但是有一个问题--有些include头文件不仅位于目标设备的/usr/include文件夹中,而且位于其子文件夹中。还有/usr/lib/arm-linux-gnueabihf文件夹。 “Hello World”示例编译失败 因为位于/usr/inc