海豚軟件下載中心,為您提供安全、放心、高速的軟件下載!

當前位置:首頁 > 軟件下載 > 其他軟件 > 編程開發 > GNU Compiler Collection linux版v4.7.0

GNU Compiler Collection linux版v4.7.0

分享到:

  GNU Compiler Collection(gcc編譯器)是GNU計劃的關鍵部分,也常被認為是跨平台編譯器的事實標準。GCC不僅是GNU/Linux上的標準編譯器,而且他也是嵌入式係統開發的標準編譯器。這是因為GCC支持各種不同的目標架構。

  GNU Compiler Collection是一套以GPL及LGPL許可證所發行的自由軟件,也是GNU計劃的關鍵部分,亦是自由的類Unix及蘋果計算機Mac OS X 操作係統的標準編譯器。GCC(特別是其中的C語言編譯器)也常被認為是跨平台編譯器的事實標準。

  GCC原名為GNU C語言編譯器(GNU C Compiler),因為它原本隻能處理C語言。

  GCC很快地擴展,變得可處理C++。之後也變得可處理Fortran、Pascal、 Objective-C、Java,以及Ada與其他語言。

  【使用方法】

  解壓縮

  拷貝gcc-4.1.2.tar.bz2(我下載的壓縮文件)到/usr/local/src(根據自己喜好選擇)下,根據壓縮格式,選擇下麵相應的一種方式解包(以下的“%”表示命令行提示符):

  % tar zxvf gcc-4.1.2.tar.gz

  或者

  % bzcat gcc-4.1.2.tar.bz2 | tar xvf -

  新生成的gcc-4.1.2這個目錄被稱為源目錄,用${srcdir}表示它。以後在出現${srcdir}的地方,應該用真實的路徑來替換它。用pwd命令可以查看當前路徑。

  在${srcdir}/INSTALL目錄下有詳細的GCC安裝說明,可用瀏覽器打開index.html閱讀。

  建立目標目錄

  目標目錄(用${objdir}表示)是用來存放編譯結果的地方。GCC建議編譯後的文件不要放在源目錄${srcdir]中(雖然這樣做也可以),最好單獨存放在另外一個目錄中,而且不能是${srcdir}的子目錄。

  例如,可以這樣建立一個叫 /usr/local/gcc-4.1.2的目標目錄:

  % mkdir /usr/local/gcc-4.1.2

  % cd gcc-4.1.2

  以下的操作主要是在目標目錄 ${objdir} 下進行。

  配置

  配置的目的是決定將GCC編譯器安裝到什麽地方(${destdir}),支持什麽語言以及指定其它一些選項等。其中,${destdir}不能與${objdir}或${srcdir}目錄相同。

  配置是通過執行${srcdir}下的configure來完成的。其命令格式為(記得用你的真實路徑替換${destdir}):

  % ${srcdir}/configure --prefix=${destdir} [其它選項]

  例如,如果想將GCC 4.1.2安裝到/usr/local/gcc-4.1.2目錄下,則${destdir}就表示這個路徑。

  在我的機器上,我是這樣配置的:

  % ../gcc-4.1.2/configure --prefix=/usr/local/gcc-4.1.2 --enable-threads=posix --disable-checking --enable--long-long --host=i386-redhat-linux --with-system-zlib --enable-languages=c,c++,java

  將GCC安裝在/usr/local/gcc-4.1.2目錄下,支持C/C++和JAVA語言,其它選項參見GCC提供的幫助說明。

  編譯

  % make

  安裝

  執行下麵的命令將編譯好的庫文件等拷貝到${destdir}目錄中(根據你設定的路徑,可能需要管理員的權限):

  % make install

  至此,GCC 4.1.2安裝過程就完成了。

  其它設置

  GCC 4.1.2的所有文件,包括命令文件(如gcc、g++)、庫文件等都在${destdir}目錄下分別存放,如命令文件放在bin目錄下、庫文件在lib下、頭文件在include下等。由於命令文件和庫文件所在的目錄還沒有包含在相應的搜索路徑內,所以必須要作適當的設置之後編譯器才能順利地找到並使用它們。

  gcc、g++、gcj的設置

  要想使用GCC 4.1.2的gcc等命令,簡單的方法就是把它的路徑${destdir}/bin放在環境變量PATH中。我不用這種方式,而是用符號連接的方式實現,這樣做的好處是我仍然可以使用係統上原來的舊版本的GCC編譯器。

  首先,查看原來的gcc所在的路徑:

  % which gcc

  在我的係統上,上述命令顯示:/usr/bin/gcc。因此,原來的gcc命令在/usr/bin目錄下。我們可以把GCC 4.1.2中的gcc、g++、gcj等命令在/usr/bin目錄下分別做一個符號連接:

  % cd /usr/bin

  % ln -s ${destdir}/bin/gcc gcc412

  % ln -s ${destdir}/bin/g++ g++412

  % ln -s ${destdir}/bin/gcj gcj412

  這樣,就可以分別使用gcc412、g++412、gcj412來調用GCC 4.1.2的gcc、g++、gcj完成對C、C++、JAVA程序的編譯了。同時,仍然能夠使用舊版本的GCC編譯器中的gcc、g++等命令。

  庫路徑的設置

  將${destdir}/lib路徑添加到環境變量LD_LIBRARY_PATH中,例如,如果GCC 4.1.2安裝在/usr/local/gcc-4.1.2目錄下,在RH Linux下可以直接在命令行上執行

  % export LD_LIBRARY_PATH=/usr/local/gcc-4.1.2/lib

  最好添加到係統的配置文件中,這樣就不必要每次都設置這個環境變量了,在文件$HOME/.bash_profile中添加下麵兩句:

  LD_LIBRARY_PATH=/usr/local/gcc-4.1.2/lib:$LD_LIBRARY_PATH

  export LD_LIBRARY_PATH

  重啟係統設置生效,或者執行命令

  % source $HOME/.bash_profile

  測試

  用新的編譯命令(gcc412、g++412等)編譯你以前的C、C++程序,檢驗新安裝的GCC編譯器是否能正常工作

  編譯警告

  在編譯時如果檢測到一個錯誤,GCC就會退出編譯過程,而警告信息就是顯出了我們需要修正的潛在的問題,盡管也許仍會著生一個可執行文件。GCC提供了一個豐富的警告係統,但是為了利用可以檢測到的警告範圍,我們必須打開這些選項。

  GCC最常用的用來檢測警告信息就是-Wall選項。這會打開一個指定類型的所有警告信息,這由程序中最常遇到的問題組成。用法如下:

  $ gcc -Wall test.c -o test

  在-Wall選項中打開的警告選項如下:

  選項 用途

  unused-function 警告聲明為靜態但是卻沒有定義的函數

  unused-label 警告聲明但是卻沒有使用的標簽

  unused-parameter 警告沒有使用的函數參數

  unused-variable 警告沒有使用的聲明的局部變量

  unused-value 警告計算但是卻沒有使用的值

  format 驗證printf中的格式字符串等基於指定的格式字符串的可用參數

  implict-int 當聲明沒有指定類型時警告

  implict-function- 函數的使用先於函數的聲明時警告

  char-subscripts 當使用字符作為數組的下標時警告

  missing-braces 當初始集合沒有被包含時警告

  parentheses 如果()的省略引起誤解時警告

  return-type 警告函數的默認聲明為int或是缺少返回值

  sequence-point 代碼元素可疑時警告

  switch 在switch語句中缺少默認值,警告可以在switch參數中指定的缺少情況

  strict-aliasing 對於變量轉換使用嚴格的規則

  unknown-pragmas 警告#pragma指令沒有被識別

  uninitilized 警告使用的變量沒有進行初始化(隻在-O2優化級別時可用)

  -Wall是-all-warnings的同義。上表列出了在-Wall允許的各種警告選項。

  在這裏我們要注意大多數的選項都會有一個相反的形式,所以我們可以禁止他們。例如,如果我們希望打開-Wall選項,但是卻要禁止沒有用到的警告集合,我們可以使用下麵的命令:

  $ gcc -Wall -Wno-unused test.c -o test

  下表列出在-Wall中沒有打開的一些有用的選項

  選項 用途

  cast-align 當一個指針進行轉換並且需要的賦值增加時警告

  sign-compare 當一個有符號數與一個無符號數進行比較並產生一個不正確的值時警告

  missing-prototypes 如果一個全局函數沒有函數原型聲明而使用時警告

  packed 如果一個結構提供了打包屬性而沒有打包事件時警告

  padded 如果一個結構進填補賦值時警告

  unreachable-code 如果代碼不會執行警告

  inline 如果一個標記為內聯但卻不能實現內聯時警告

  disabled-optimization 當優化器不能執行指定的優化時警告

  最後一個有用的警告選項是-Werror。這個選項指明當檢測到錯誤時並不簡單的顯示錯誤,編譯器會將警告當作錯誤對待並退出編譯過程。這個選項對於生成高質量的代碼是相當有用的。

  調試選項

  如果我們希望用一個符號鏈接調試器來調試我們的代碼,我們可以指定-g選項來為GDB著生調用信息。-g選項可以指定一個參數來說明生成哪種格式。如果我們希望調試信息使用dwarf-2

  格式來生成調試信息,我們可以使用下麵的命令:

  $ gcc -gdwarf-2 test.c -o test

  其他的一些工具:

  下麵我們來看一些在我們的開發過程中有用的GNU工具。

  首先,我們如何來知道可執行程序或是目標文件的大小?size實用程序可以使我們知道文本尺寸(指令條數)以及data和bss段。如下麵的例子:

  $ size test.o

  text data bss dec hex filename

  789 256 4 1049 419 test.o

  在這裏我們列出了目標文件test.o的文件大小。我們發現文本尺寸(指令和常量)是789字節,data段是256字節,bss段(初始時自動設置為0)是4字節。如果我們要知道更為詳細的內容,我們可以使用objdump實用程序。我們可以使用-syms參數來知道可執行程序或是目標文件的符號表,如下麵的例子:

  $ objdump -syms test.o

  這會產生一個目標文件中可用符號列表,他們的類型(text,bss,data),長度,偏移量等內容。我們也可以使用disassemble參數來反匯編程序,如下麵的例子:

  # objdump —disassemble test.o

  這會產生一個目標文件中的函數列表,以及由GCC產生的指令。

  最後,nm程序可以用來理解目標文件中的符號。這個程序不僅會列每一個符號以及符號類型的詳細信息。還有一些其他的選項可用,我們可以從nm的主頁中得到更為詳細的內容。

展開更多

軟件截圖

GCC標準編譯器下載地址

最新軟件推薦

本地下載方式 其他下載方式

相關版本推薦