我之前說(shuō)過(guò)MinGW中的東西很雜,所以要根據(jù)實(shí)際需要從MinGW的SourceForge主頁(yè)下載不同的軟件包。下面是我選擇的MinGW安裝包和安裝過(guò)程:
下載一個(gè)MinGW的網(wǎng)絡(luò)安裝程序,通常叫:MinGW-[ver].exe,其中ver是安裝程序的版本號(hào),這個(gè)文件很小。
運(yùn)行下載到本地的MinGW網(wǎng)絡(luò)安裝程序,它會(huì)提示你是僅下載(Download only),還是下載后立即安裝(Download and install)軟件包??梢赃x擇MinGW整體環(huán)境的版本是:當(dāng)前的(Current),以前的(Previous),還是候選的(Candidate),這是對(duì)軟件包版本的全局性設(shè)置。我一般都不關(guān)心這里選擇的版本,因?yàn)橛行┸浖鼘?shí)在有點(diǎn)老了,新版本也早出來(lái)了,但很長(zhǎng)時(shí)間把老的放在Current版本的MinGW環(huán)境下,比如:截止于2009-12,Current版的MinGW設(shè)置中,下載到的GCC仍然是GCC 3。
然后在安裝程序中選擇需要的軟件包。因?yàn)檫@里選擇的軟件名字和實(shí)際下載的文件名并不完全對(duì)應(yīng),所以我會(huì)將所有的軟件包全部選擇,然后以Download only的方式只執(zhí)行下載操作,最后根據(jù)需要手工安裝軟件包。
MinGW安裝程序下載的軟件包都是gzip壓縮的tar包,并且這些軟件只是MinGW的基本軟件,還有些額外的軟件包不能通過(guò)安裝程序下載。tar包里面的目錄結(jié)構(gòu)都符合Unix/Linux的目錄組織方式(FHS - Filesystem Hierarchy Standard),只要將它們都解壓到同一個(gè)目錄下,就算把MinGW的基本包安裝完成了。通過(guò)安裝程序能下載到的基本軟件包有:
binutils-[ver]-mingw32-bin.tar.gz
GNU binutils的Windows移植版,包含一系列編譯、鏈接、轉(zhuǎn)儲(chǔ)等工具,如:ld、as、objdump、strip、windres、readelf等。
gcc-core-[ver].tar.gz
GCC的Windows移植版的核心文件,包括GCC的C語(yǔ)言編譯器和運(yùn)行環(huán)境。Current版的MinGW安裝程序中,GCC的版本很長(zhǎng)時(shí)間都是GCC 3.4.5,可能這個(gè)版本最穩(wěn)定吧,不過(guò)有時(shí)我需要使用GCC 4新增的特性和選項(xiàng),所以必安裝GCC 4。
gcc-[lang]-[ver].tar.gz
GCC特定程序語(yǔ)言的編譯器和運(yùn)行環(huán)境,比如:C++的編譯器為gcc-g++-[ver].tar.gz,F(xiàn)ORTRAN 77的編譯器為gcc-g77-[ver].tar.gz等。C++的RT庫(kù)/標(biāo)準(zhǔn)庫(kù)包含在gcc-g++-[ver].tar.gz中。
mingwrt-[ver]-mingw32-dev.tar.gz
MinGW的基本開發(fā)庫(kù),包括C的RT庫(kù)/標(biāo)準(zhǔn)庫(kù)和一個(gè)簡(jiǎn)單的POSIX界面。
mingwrt-[ver]-mingw32-dll.tar.gz
包含mingwm10.dll這個(gè)動(dòng)態(tài)鏈接庫(kù),當(dāng)使用GCC的-mthreads選項(xiàng)(和線程安全異常處理有關(guān))編譯時(shí),生成的程序依賴mingwm10.dll。
w32api-[ver]-mingw32-dev.tar.gz
Windows平臺(tái)的開發(fā)庫(kù),主要是Windows API接口,也包含DDK的頭文件(不知道有沒(méi)有庫(kù))和OpenGL的接口。Winsock、DirectX、OLE DB等Windows下比較重要的庫(kù)在MinGW提供的Windows API中都能找到。
make-[ver]-mingw32-bin.tar.gz
GNU Make的Windows移植版,程序名為mingw32-make.exe。
下載、安裝額外的MinGW軟件包。我常安裝的額外軟件包有:
GCC 4
因?yàn)樵贚inux下開發(fā)時(shí),我用的是GCC 4版本的編譯器,為了方便程序工程的移植,在Windows下我通常也安裝GCC 4版本的編譯器。這里是MinGW GCC 4.4.0 Full的下載地址,此包中包括GCC所有的特定語(yǔ)言編譯器和運(yùn)行環(huán)境,此包為采用LZMA壓縮的tar包,可以用7-zip解壓,解壓后的所有文件大小在380M以上。
GCC 4.4.0 C++的RT庫(kù)/標(biāo)準(zhǔn)庫(kù)使用GNU的libstdc++-6的Windows移植版,C++標(biāo)準(zhǔn)庫(kù)頭文件的位置為:
/lib/gcc/mingw32/4.4.0/include/c++
使用GCC 4.4.0默認(rèn)選項(xiàng)編譯C++代碼,生成的程序會(huì)依賴libgcc_s_dw2-1.dll,參考GCC 4.4.0 Release Notes and Changelog→5. GENERAL NOTES→Dynamic linking with libgcc_s_dw2-1.dll,自譯如下:
當(dāng)在多個(gè)模塊間,比如:DLL之間或DLL與EXE之間,拋出異常時(shí),如果采用動(dòng)態(tài)鏈接編譯方式,則必需鏈接到libgcc_s_dw2-1.dll。因此,這是所有除C程序外的程序默認(rèn)鏈接方式。如果要禁止動(dòng)態(tài)鏈接,可以使用-static-libgcc選項(xiàng),如果要使用C程序的動(dòng)態(tài)鏈接方式,可以使用-shared-libgcc選項(xiàng)。
如果使用GCC 3.4.5 C++,它的標(biāo)準(zhǔn)庫(kù)頭文件位置為:
/include/c++/3.4.5
MinGW GCC 4.4.0 Full中還包括一個(gè)pthread的實(shí)現(xiàn):pthread-2.8.0,頭文件位置為:/mingw32/include,庫(kù)為:/mingw32/lib/libpthread.a。如果覺(jué)得MinGW GCC 4.4.0 Full比較大,可以單獨(dú)下載GCC 4.4.0的各特定語(yǔ)言編譯器和運(yùn)行環(huán)境,還有單獨(dú)的pthread-2.8.0包下載地址。
TCL/TK
有時(shí)需要用TCL/TK編寫一些自動(dòng)化腳本和管理小程序,可以使用MinGW提供的TCL/TK運(yùn)行環(huán)境:tcltk-8.4.1-1。
相比起ActiveTCL和Cygwin的TCL/TK實(shí)現(xiàn),MinGW的TCL/TK運(yùn)行環(huán)境很小巧,不過(guò)功能上一點(diǎn)都不差,在/lib/tk8.4/demos目錄下還有TK腳本的示例,對(duì)學(xué)習(xí)TCL/TK很有幫助,運(yùn)行其中的widget腳本,就可以瀏覽所有的TK腳本示例。
可以使用Windows的assoc和ftype命令,將.tcl/.tk文件和TCL/TK的解釋器程序關(guān)聯(lián),如下:
1 | # 將.tk文件關(guān)聯(lián)到TK的解釋器wish84.exe |
2 | assoc .tk=TKScript |
3 | ftype TKScript="C:\MinGW\bin\wish84.exe" %1 %* |
4 | |
5 | # 將.tcl文件關(guān)聯(lián)到TCL的解釋器tclsh84.exe |
6 | assoc .tcl=TCLScript |
7 | ftype TCLScript="C:\MinGW\bin\tclsh84.exe" %1 %* |
注意:使用assoc和ftype來(lái)關(guān)聯(lián)腳本文件和解釋器程序,只對(duì)Windows的Explorer Shell和命令行解釋器cmd起作用,對(duì)Cygwin或MSYS的Shell是不起作用的。Cygwin和MSYS的bash依靠exec族函數(shù)啟動(dòng)其它程序,所以可以在腳本文件的首行加入#!/path-to-interpreter指示來(lái)關(guān)聯(lián)解釋器程序。
GDB
GDB可以和Eclipse-CDT集成開發(fā)環(huán)境很好的結(jié)合,而且雖然GDB是以Source-Level源碼級(jí)調(diào)試著稱的,但在Eclipse-CDT中很容易使用GDB的匯編指令級(jí)調(diào)試。MinGW中的GDB版本已更新到GDB 7(2009-10),這是GDB 7.0.1的下載地址。
有些工具在MinGW/MSYS和Cygwin中都有,比如:man、wget等。我傾向于安裝Cygwin中提供的這些工具。
有些庫(kù)在MinGW的安裝包中也能找到,比如:pthread、libiconv、gettext、OpenSSL等,但我傾向于從:?jiǎn)为?dú)移植到Windows并維護(hù)的項(xiàng)目中下載這些庫(kù),因?yàn)樗鼈兏拥乇镜鼗?,這些單獨(dú)的項(xiàng)目也更加關(guān)注特定的庫(kù)本身。除非這些庫(kù)的Windows移植版和Linux下的原版,它們之間的使用方式相差太大,我才會(huì)用MinGW或Cygwin中提供的庫(kù)。下面列舉一些我常用的庫(kù):
pthread
由sourceware.org維護(hù)的Windows移植版的pthread庫(kù),可以從這個(gè)FTP地址瀏覽并下載合適的pthread版本。
libiconv、gettext
這兩個(gè)庫(kù)對(duì)于編和i18n相關(guān)的程序很有用,它們可以從SourceForge的gettext for Win32項(xiàng)目下載,不過(guò)好像很長(zhǎng)時(shí)間沒(méi)更新了:截止于2009-12,提供的還是2004-01發(fā)布的libiconv 1.9.1和gettext 0.13.1。
不過(guò)好消息是:從libiconv 1.9和gettext 0.13開始,這兩個(gè)庫(kù)的GNU原版都支持Windows下的編譯了。
OpenSSL
現(xiàn)在,OpenSSL的官方原版是支持Windows下編譯的,而且支持包括:VC、BC、Cygwin、MinGW等多種Windows編譯環(huán)境,參考我的這篇文章:在MinGW環(huán)境編譯生成OpenSSL 0.9.8k記錄。另外還有VC編譯的OpenSSL版本,怕自己編譯麻煩的話,可以從這里下載。不過(guò)這里較新的OpenSSL版本都用VC2005或VC2008編譯,運(yùn)行時(shí)需要VC的運(yùn)行環(huán)境,o(>_<)o。
此外還有Boost、wxWidgets、ACE等這些重量級(jí)的庫(kù),這些庫(kù)每個(gè)的安裝配置都有很多細(xì)節(jié),需要單獨(dú)來(lái)說(shuō)。不過(guò)好處是:像這些比較成熟的庫(kù),通常是支持多種系統(tǒng)和編譯環(huán)境的。
聯(lián)系客服