在網(wǎng)上,編譯GCC的方法有很多,大部份人都推薦在CYGWIN環(huán)境下進(jìn)行交叉編譯,這樣可以可以少遇到許多困難,但是使用CYGWIN時(shí)往往需要編譯許多其它相關(guān)工具才行,對(duì)于我這個(gè)懶人來(lái)說(shuō),真是不太現(xiàn)實(shí),所以我開(kāi)始了我用MINGW編譯之旅。
在國(guó)外似乎很早就有人開(kāi)始用MINGW嘗試編譯GCC了,不過(guò)如你根據(jù)它的方法的話,依我試驗(yàn)后的經(jīng)驗(yàn)不一定能夠成功的編譯出來(lái),因?yàn)橛性S多提前工作,在那文檔中并沒(méi)有列出。下面將以GCC4.2.2為例進(jìn)行
前期準(zhǔn)備工作:
一、準(zhǔn)備一個(gè)已編譯好的GCC,我用的是TDM的GCC4.2.1(當(dāng)然用它的GCC4.2.2也可以)
二、安裝MSYS和它的工具包,在MSYS安裝完成以后,一般會(huì)要求指定一下你的GCC安裝路徑,按要求填寫(xiě)即可,萬(wàn)一你想改變了你可以在MSYS文件夾中的 /etc/fstab下進(jìn)行修改。最后要說(shuō)的是你可能需要從MINGW的官網(wǎng)上下載最新MAKE和MAKEINFO這個(gè)兩個(gè)程序,后面我將會(huì)給出為什么需要它們的原因
三、安裝mingw-core、mingw-win32api、mingw-binutil
四、編譯GMP與MPFR,根據(jù)測(cè)試GMP雖然有了4.2.2版本,但是在WIN環(huán)境下無(wú)法通過(guò)編譯(有高人幫我解決更好了),但是GMP4.2.1依然可以編譯使用,為編譯 GCC4.2.2所以MPFR必需要求使用MPFR4.2.2,在msys環(huán)境下,老慣例的三步走configre,make,make install就可以了,將編譯好的相關(guān)文件復(fù)制到GCC的文件夾中,當(dāng)然你可以在GCC編譯時(shí)另外指定路徑,不過(guò)會(huì)變得麻煩些
五、安裝GNUWIN32組件
bison into
http://gnuwin32.sourceforge.net/down...on-bin-zip.php
http://gnuwin32.sourceforge.net/down...on-dep-zip.php
flex
http://gnuwin32.sourceforge.net/down...ex-bin-zip.php
libtool
http://gnuwin32.sourceforge.net/down...ol-bin-zip.php
libiconv
http://gnuwin32.sourceforge.net/down...nv-bin-zip.php
http://gnuwin32.sourceforge.net/down...nv-dep-zip.php
下一步編譯:
其實(shí)正常來(lái)說(shuō)這一步可以忽略不說(shuō),但是我就是不理解為什么在WIN環(huán)境下會(huì)變得如此的復(fù)雜?
下面是我的configure執(zhí)行腳本
#!/bin/sh
PATH=/f/GCC/bin:/f/msys/1.0/bin:$PATH
../../configure --prefix=/mingw --enable-languages=c,c++,fortran,objc,obj-c++,treelang,java --disable-nls --disable-werror --disable-win32-registry --enable-sjlj-exceptions --enable-threads=win32 --disable-libstdcxx-pch --enable-fully-dynamic-string --enable-libgomp --with-tune=generic --with-as=/mingw/bin/as.exe --with-ld=/mingw/bin/ld.exe --with-gcc --with-gnu-ld --with-gnu-as
注意--with-as=/mingw/bin/as.exe --with-ld=/mingw/bin/ld.exe 這兩句是必須要的,否則在編譯可能出現(xiàn)無(wú)法生成a.exe文件的錯(cuò)誤,根據(jù)網(wǎng)上得出的資料是MSYS在文件映射方面,最好是使用UNIX下面的路徑方式,如果使用DOS的路徑方式很容易出現(xiàn)一些陌名的錯(cuò)誤。還有如果你要編譯GCC的大部份編譯器,最好還是按照我上面的來(lái)寫(xiě)--enable-languages=c,c++,fortran,objc,obj-c++,treelang,java,因?yàn)橛袝r(shí)候GCC配置無(wú)法正常識(shí)別你要編譯的語(yǔ)言種類,另外GNAT自gcc4.2.0開(kāi)始,我就一直沒(méi)有成功過(guò),一直提示缺少calander文件。
接著是make,心跳吧,在我的編譯歷程中,這里是最容易出現(xiàn)各種各樣奇怪的錯(cuò)誤的,一般來(lái)說(shuō)有兩個(gè)方面,一個(gè)是上述配置沒(méi)有做好,存在一定問(wèn)題,另一個(gè)就是編譯用的源文件出現(xiàn)問(wèn)題,我發(fā)現(xiàn)如果你使用WINRAR來(lái)解壓GCC4.2.2的源文件時(shí),會(huì)有一個(gè)長(zhǎng)文件名的.h文件解壓后文件名出錯(cuò),導(dǎo)致無(wú)法編譯通過(guò),我推薦使用7-ZIP,這個(gè)在多次使用過(guò)程中沒(méi)有出現(xiàn)任何問(wèn)題。
最后一步是make install,很不幸的說(shuō),這里會(huì)存在一個(gè)問(wèn)題,有時(shí)你會(huì)發(fā)現(xiàn)你安裝一半會(huì)提示你,需要安裝makeinfo和最新的make應(yīng)用程序,如果你仔細(xì)觀察一下你會(huì)發(fā)現(xiàn)GCC的CONFIGURE里面使用的是 missing makeinfo當(dāng)然是不對(duì)的了,還好MINGW上已經(jīng)提供了最的MSYS用MAKE和MAKEINFO,下載覆蓋,然后修改GCC源文件根目錄下的MAKEFILE和子文件夾GCC下的MAKEFILE,把里面的missing makeinfo替換為目錄下的makeinfo就可以解決,同時(shí)不要使用mingw32-make那個(gè)程序,那個(gè)雖然是同MINGW GCC在一起,但是無(wú)法在MSYS中使用,否則會(huì)出現(xiàn)調(diào)用文件目錄的錯(cuò)誤,好了到了這一步,GCC4.2.2的編譯全過(guò)程就結(jié)束了,希望大家用得愉快