2013-04-13 151 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!