2004年4月20日最新版本的GCC編譯器3.4.0發佈了。目前,GCC能夠用來編譯C/C++、FORTRAN、java、OBJC、ADA等語言的程序,可根據須要選擇安裝支持的語言。GCC 3.4.0比之前版本更好地支持了C++標準。本文以在Redhatlinux上安裝GCC3.4.0爲例,介紹了GCC的安裝過程。php
安裝以前,系統中必需要有cc或者gcc等編譯器,而且是可用的,或者用環境變量CC指定系統上的編譯器。若是系統上沒有編譯器,不能安裝源代碼形式的GCC 3.4.0。若是是這種狀況,能夠在網上找一個與你係統相適應的如RPM等二進制形式的GCC軟件包來安裝使用。本文介紹的是以源代碼形式提供的GCC軟件包的安裝過程,軟件包自己和其安裝過程一樣適用於其它Linux和Unix系統。css
系統上原來的GCC編譯器多是把gcc等命令文件、庫文件、頭文件等分別存放到系統中的不一樣目錄下的。與此不一樣,如今GCC建議咱們將一個版本的GCC安裝在一個單獨的目錄下。這樣作的好處是未來不須要它的時候能夠方便地刪除整個目錄便可(由於GCC沒有uninstall功能);缺點是在安裝完成後要作一些設置工做才能使編譯器工做正常。在本文中我採用這個方案安裝GCC 3.4.0,而且在安裝完成後,仍然可以使用原來低版本的GCC編譯器,即一個系統上能夠同時存在並使用多個版本的GCC編譯器。html
按照本文提供的步驟和設置選項,即便之前沒有安裝過GCC,也能夠在系統上安裝上一個可工做的新版本的GCC編譯器。java
1. 下載linux
在GCC網站上(http://gcc.gnu.org/)或者經過網上搜索能夠查找到下載資源。目前GCC的最新版本爲 3.4.0。可供下載的文件通常有兩種形式:gcc-3.4.0.tar.gz和gcc-3.4.0.tar.bz2,只是壓縮格式不同,內容徹底一致,下載其中一種便可。c++
2. 解壓縮瀏覽器
根據壓縮格式,選擇下面相應的一種方式解包(如下的「%」表示命令行提示符):app
% tar xzvf gcc-3.4.0.tar.gz
或者
% bzcat gcc-3.4.0.tar.bz2 | tar xvf -函數
新生成的gcc-3.4.0這個目錄被稱爲源目錄,用${srcdir}表示它。之後在出現${srcdir}的地方,應該用真實的路徑來替換它。用pwd命令能夠查看當前路徑。測試
在${srcdir}/INSTALL目錄下有詳細的GCC安裝說明,可用瀏覽器打開index.html閱讀。
3. 創建目標目錄
目標目錄(用${objdir}表示)是用來存放編譯結果的地方。GCC建議編譯後的文件不要放在源目錄${srcdir]中(雖然這樣作也能夠),最好單獨存放在另一個目錄中,並且不能是${srcdir}的子目錄。
例如,能夠這樣創建一個叫 gcc-build 的目標目錄(與源目錄${srcdir}是同級目錄):
% mkdir gcc-build
% cd gcc-build
如下的操做主要是在目標目錄 ${objdir} 下進行。
4. 配置
配置的目的是決定將GCC編譯器安裝到什麼地方(${destdir}),支持什麼語言以及指定其它一些選項等。其中,${destdir}不能與${objdir}或${srcdir}目錄相同。
配置是經過執行${srcdir}下的configure來完成的。其命令格式爲(記得用你的真實路徑替換${destdir}):
% ${srcdir}/configure --PRefix=${destdir} [其它選項]
例如,若是想將GCC 3.4.0安裝到/usr/local/gcc-3.4.0目錄下,則${destdir}就表示這個路徑。
在個人機器上,我是這樣配置的:
% ../gcc-3.4.0/configure --prefix=/usr/local/gcc-3.4.0 --enable-threads=posix --disable-checking --enable--long-long --host=i386-redhat-linux --with-system-zlib --enable-languages=c,c++,java
將GCC安裝在/usr/local/gcc-3.4.0目錄下,支持C/C++和JAVA語言,其它選項參見GCC提供的幫助說明。
5. 編譯
% make
這是一個漫長的過程。在個人機器上(P4-1.6),這個過程用了50多分鐘。
錯誤以下
網上找了下,下面是原文
這 純屬軟件bug,由於使用open函數的時候,若是在第二個參數中使用了 O_CREAT,就必須添加第三個參數:建立文件時賦予的初始權限。而在gcc-3.3.6~3.4.4/gcc/的collect2.c文件中有漏掉第 三個參數的錯誤,而gcc-4.3對語法錯誤的檢查嚴格是出了名的(4.1就不會所以錯誤退出),因此就退出了。
這也是能夠解決的,就是在gcc-3.3.6/gcc/collect2.c中的第1535行(或者其餘行,能夠搜索)改成:
redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT, 0777);
哈哈,問題解決了,也就是加了0777那第三個參數
6. 安裝
執行下面的命令將編譯好的庫文件等拷貝到${destdir}目錄中(根據你設定的路徑,可能須要管理員的權限):
% make install
至此,GCC 3.4.0安裝過程就完成了。
6. 其它設置
GCC 3.4.0的全部文件,包括命令文件(如gcc、g++)、庫文件等都在${destdir}目錄下分別存放,如命令文件放在bin目錄下、庫文件在lib下、頭文件在include下等。因爲命令文件和庫文件所在的目錄尚未包含在相應的搜索路徑內,因此必需要做適當的設置以後編譯器才能順利地找到並使用它們。
6.1 gcc、g++、gcj的設置
要想使用GCC 3.4.0的gcc等命令,簡單的方法就是把它的路徑${destdir}/bin放在環境變量PATH中。我不用這種方式,而是用符號鏈接的方式實現,這樣作的好處是我仍然可使用系統上原來的舊版本的GCC編譯器。
首先,查看原來的gcc所在的路徑:
% which gcc
在個人系統上,上述命令顯示:/usr/bin/gcc。所以,原來的gcc命令在/usr/bin目錄下。咱們能夠把GCC 3.4.0中的gcc、g++、gcj等命令在/usr/bin目錄下分別作一個符號鏈接:
% cd /usr/bin
% ln -s ${destdir}/bin/gcc gcc34
% ln -s ${destdir}/bin/g++ g++34
% ln -s ${destdir}/bin/gcj gcj34
這樣,就能夠分別使用gcc3四、g++3四、gcj34來調用GCC 3.4.0的gcc、g++、gcj完成對C、C++、JAVA程序的編譯了。同時,仍然可以使用舊版本的GCC編譯器中的gcc、g++等命令。
6.2 庫路徑的設置
將${destdir}/lib路徑添加到環境變量LD_LIBRARY_PATH中,最好添加到系統的配置文件中,這樣就沒必要要每次都設置這個環境變量了。
例如,若是GCC 3.4.0安裝在/usr/local/gcc-3.4.0目錄下,在RH Linux下能夠直接在命令行上執行或者在文件/etc/profile中添加下面一句:
setenv LD_LIBRARY_PATH /usr/local/gcc-3.4.0/lib:$LD_LIBRARY_PATH
7. 測試
用新的編譯命令(gcc3四、g++34等)編譯你之前的C、C++程序,檢驗新安裝的GCC編譯器是否能正常工做。
8. 根據須要,能夠刪除或者保留${srcdir}和${objdir}目錄。
後記:
前兩天剛安裝好了GCC 3.4.0,把安裝規劃、安裝過程、一些注意事項記錄下來就造成了這篇文章。但願對你們、特別是尚未安裝過GCC的朋友在安裝GCC的時候有所幫助。