我想使用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。
问题:
从Linux主机交叉编译Windows的Qt之类的东西时, 是否 应调用本机编译器?也就是说,在交叉编译过程中,我们不应该 仅 使用交叉编译器吗?指定-xplatform
选项时,我看不到为什么Qt的configure脚本试图调用系统的本机编译器。
如果我使用的是mingw交叉编译器,什么时候需要处理specs文件?GCC的规范文件对我来说还是个谜,所以我想知道这里的背景知识是否对我有帮助。
通常,除了在我的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