2013-04-13 181 views
16

我有一个项目,我想为Windows编译。我有合适的makefile,一切都适用于g ++。我运行apt-get install mingw32,下载了一个100-ish MB的软件包,但是我找不到如何真正运行它。没有mingw32可执行文件,也不能在互联网上找到任何帮助,那么我如何真正编译它?MinGW在Linux上交叉编译

+0

如果您从终端运行以下命令,它应该告诉您编译器的可执行文件(本例中为g ++)。然后,您可以适当地编辑您的生成文件。 “locate mingw | grep g ++” – thedaver64

+0

是否使用autotools生成'Makefile'? – gipi

+0

@gipi我真的不记得了,我为我的项目使用cmake。 – thedaver64

回答

12

如果看到dpkg -L mingw32的输出结果,可以看到该软件包包含一个工具链,即一组替代工具(编译器,链接器等),可用于编译另一个系统中的代码。

您必须使用/usr/bin/i586-mingw32msvc-g++才能编译您的代码。如果我没记错的话,存在一个变量来告诉Makefile使用这样的工具链。

+0

工具链没有变量,但可以分别为C和C++编译器设置变量:CC和CXX。 –

4

另一种选择是看看Mingw Cross Environment(MXE),它专门针对从Linux到Windows(以及最近也是Mac)的交叉编译。该软件包支持许多库,并且正在积极开发中。只要看看网站,看看它是否适合您的需求。

顺便说一下,建议您使用开发而不是发布版本。这是因为发布版本通常非常快速过期,这是由于程序包维护人员(库的)更改了URL,从而导致MXE发布版本中断。开发版本通常更新。

+0

在网站上没有提及Mac?这看起来很整洁,我对此很陌生,所以我猜你的工具首先创建了“交叉编译器”,然后我只需使用你创建的工具链来编译东西。 – CMCDragonkai

+0

嗯,这不是“我的”,但它就是这么做的。不知道有关Mac支持的当前状态(我在一段时间内没有使用mxe)。过去有人提到他们正在寻求支持,但我不知道它是否已经实施。 – Bart

4

我用这个交叉编译Postgres的:

$ sudo apt-get install mingw-w64 
$ ./configure --host=i686-w64-mingw32 --without-zlib # 32 bit 
# or --host=x86_64-w64-mingw32 64 bit 

裁判here

其他项目采取不同的方式,喜欢的ffmpeg:

./configure --target-os=mingw32 --cross-prefix=i686-w64-mingw32- 

或一些

./configure CC=i686-w64-mingw32-gcc ... 

等GL!