linux gcc安裝

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多分鐘。

錯誤以下

gcc:call to '__open_missing_mode' declared with attribute error

網上找了下,下面是原文

 

這 純屬軟件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的時候有所幫助。

相關文章
相關標籤/搜索