如何在Linux上调用MinGW交叉编译器

How do I invoke the MinGW cross-compiler on Linux?

本文关键字:MinGW 编译器 调用 Linux      更新时间:2023-10-16

我有一个项目,我想为Windows交叉编译。我有适当的Makefile和一切工作与g++。我运行

$ apt install mingw-w64

并下载了500mb的软件包,但我不知道如何实际运行它。没有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交叉环境(MXE),它专门针对从Linux到Windows(最近也包括到Mac)的交叉编译。该包内置了对大量库的支持,并且正在积极开发中。只要浏览一下网站,看看它是否适合你的需要。

顺便说一下,建议您使用开发版本而不是发布版本。这是因为发布版本通常非常快地过时,因为包维护者(库)更改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

ref这里

其他项目的做法不同,比如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