1. 程式人生 > >在Linux上交叉編譯windows程式

在Linux上交叉編譯windows程式

轉自:http://www.cublog.cn/u/12592/showart_163722.html

最近幾天搞 wxWidgets,由於要同時編譯應用程式的 Windows 版本,又懶得在虛擬機器裡面編譯程式,於是想到用交叉編譯的方式在 Linux 上編譯好 Windows 版本的程式,再用 Wine 或者虛擬機器來執行。試了一下,這種方法很好用,比在虛擬機器裡面編譯程式快很多。

我的作業系統是 debian sarge,其中已經有 mingw32 編譯器,只需安裝:

apt-get install mingw32這會安裝好 mingw32 交叉編譯系統,用 i586-mingw32msvc-gcc 即可為 Windows 編譯程式。

在編譯 wxWidgets 的 Windows 版本之前,需要安裝 DirectX 的標頭檔案。大概是由於版權之類的原因,在 Debian 的 mingw32 中並未包含 DirectX 的標頭檔案,只包含了 DirectX 的庫,因此需要自己安裝。如果不安裝,在編譯 wxWidgets 的時候會有警告,並且系統不會產生 wxDisplay 這個類。安裝並不複雜,只要從網路上找到相關的標頭檔案和庫檔案,並解壓到 /usr/i586-mingw32msvc 目錄中即可。

然後就可以編譯 wxWidgets 了,下載並解壓原始碼後,用如下命令可以編譯:

./configure --host=i586-mingw32msvc --target=i586-mingw32msvc --prefix=~/Workshop/mingw32 --enable-monolithic --disable-shared
make; make install-strip
make -C contrib; make -C contrib install-strip

編譯完成後,進入 samples 目錄,隨便找一個例程 make 一下,便可產生 exe 檔案了。要執行這個檔案,需要 mingwm10.dll 這個檔案,在 Debian 中,此檔案位於 /usr/share/doc/mingw32-runtime 目錄中,把它複製到當前目錄,便可用 wine 執行了。如果沒有問題,也可以把這個檔案仍到 Wine 的 C:/Windows/system32 目錄中。

下圖是在 Wine 中執行程式的效果:

效果圖

下圖是在 win4lin 中執行程式的效果:

抓屏