星期日, 3月 29, 2009

Cross-compile Windows Applicatoin and Library (Static and Shared) on Linux

最近需要在Linux上編譯Windows DLL, 用Google找了一下, 結論是用MinGW來達成.

看了一些網頁, 都在講怎麼在Linux先編譯MinGW. 可是都沒成功.

後來在MinGW網頁裡的FAQ找到一個官方做法1, 使用x86-mingw32-build.sh (這檔案包含在x86-mingw32-build.sh-0.0-20061107-1.tar.bz2), 使用方法請加--help就可以看到了.

這個script會以互動模式把編譯前需要的組態和檔案搞定. 過程中, 會詢問source packages要從哪裡獲得. 第一次編譯的我, 從網路上下載囉, 下載後會把檔案放在你指定的位置, 假設/opt/mingw32/src)

但, 在編譯binutil時, 是使用binutils-2.17.50-20060716-1-src.tar.gz這個檔案, 會使得編譯失敗.

這時, 我們只去MinGW網站下載binutils-2.19.1-src.tar這個檔案, 並放入/opt/mingw32/src裡, 然後將先前的binutils-2.17.50-20060716-1-src.tar.gz先暫時移到別的地方.

然後, 重新執行x86-mingw32-build.sh並在過程中指定source packages從/opt/mingw32/src裡取得. 這樣就可以順利編譯出MinGW.

然後, 我們就可以用MinGW編譯出Windows的執行檔(.exe)和函式庫(.lib和.dll).

1. MinGW cross compiler for Linux build environment, http://www.mingw.org/wiki/LinuxCrossMinGW