我有一个要为 Windows 交叉编译的项目。我有适当的 Makefile 并且一切都适用于g++
. 我跑了
$ apt install mingw-w64
并下载了 500 MB 的软件包,但我不知道如何实际运行它。没有mingw
可执行文件,那么我该如何实际编译呢?
我有一个要为 Windows 交叉编译的项目。我有适当的 Makefile 并且一切都适用于g++
. 我跑了
$ apt install mingw-w64
并下载了 500 MB 的软件包,但我不知道如何实际运行它。没有mingw
可执行文件,那么我该如何实际编译呢?
如果您查看 Ubuntu 包网络服务器上的文件列表以了解mingw-w64
的组成包:
gcc-mingw-w64-x86-64
g++-mingw-w64-x86-64
binutils-mingw-w64-x86-64
mingw-w64-x86-64-dev
gcc-mingw-w64-i686
g++-mingw-w64-i686
binutils-mingw-w64-i686
mingw-w64-i686-dev
您可以看到它mingw-w64
提供了一个工具链,即一组替代工具(编译器、链接器、头文件等),用于为另一个系统编译您的代码。
假设您要为 64 位系统编译 C++ 代码,则需要使用/usr/bin/x86_64-w64-mingw32-g++-win32
. 您可以使用CXX
环境变量来告诉大多数 Makefile 使用该编译器来编译代码。
另一种选择是查看 Mingw Cross Environment ( MXE ),它专门针对从 Linux 到 Windows(以及最近到 Mac)的交叉编译。该软件包具有对大量库的内置 xsupport,并且正在积极开发中。只需查看该网站,了解它是否适合您的需求。
顺便说一句,建议您使用开发版本而不是发布版本。这是因为发布版本通常很快就会过时,因为(库的)包维护者更改 URL 导致 MXE 发布版本损坏。开发版本通常更新。
我用它来交叉编译postgres:
$ sudo apt-get install mingw-w64
$ ./configure --host=i686-w64-mingw32 --without-zlib # 32 bit
# or --host=x86_64-w64-mingw32 64 bit
参考这里
其他项目的做法不同,例如 ffmpeg:
./configure --target-os=mingw32 --cross-prefix=i686-w64-mingw32-
或一些
./configure CC=i686-w64-mingw32-gcc ...
等等。 GL!
这是我针对mingw g++
交叉编译器的方式:
$ ./configure --with-mingw-cross-compiler=g++-mingw-w64-i686