1. 程式人生 > >Ubuntu下GCC的安裝以及版本控制

Ubuntu下GCC的安裝以及版本控制

在Ubuntu下安裝GCC和其他一些Linux系統有點不一樣。

方法一:

該方法超簡單:
sudo apt-get  build-depgcc

就上面這條命令就可以搞定

方法二:
sudo apt-get  install  build-essential

還是簡單,一句命令也可以搞定

安裝完了可以執行
gcc--version

的命令來檢視版本,輸出如下:

gcc(GCC)4.2.3(Ubuntu4.2.3-2ubuntu7)
Copyright(C)2007FreeSoftwareFoundation,Inc.
方法三:

1.下載GCC原始碼

  wget ftp://mirrors.kernel.org/gnu/gcc/gcc-4.9.0/gcc-4.9.0.tar.gz

2.解壓:

  tar -zxvf gcc-4.9.0.tar.gz

3.下載編譯所需依賴項:

  cd gcc-4.9.0                    //進入解包後的gcc資料夾

./contrib/download_prerequisites //下載依賴項

cd … //返回上層目錄

4.建立編譯輸出目錄:

  mkdir gcc-build-4.9.0

5.進入輸出目錄,執行以下命令,並生成makefile檔案:

  cd gcc-build-4.9.0

…/gcc-4.9.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

6.編譯:

  make -j4

接下來就是等待了,整個過程大約40分鐘左右。PS:最好不要在編譯過程中再去做別的什麼事,整個過程CPU都是滿載的,要是莫名終止了,後面麻煩事也不少。

7.安裝:

編譯結束以後,我們就可以執行安裝了:

  make install

8.檢查版本:

  gcc --version
  或gcc -v


編譯則使用gcc命令。要往下學習首先就得熟悉gcc命令的用法。

gcc命令提供了非常多的命令選項,但並不是所有都要熟悉,初學時掌握幾個常用的就可以了,到後面再慢慢學習其它選項,免得因選項太多而打擊了學習的信心。

一. 常用編譯命令選項
假設源程式檔名為test.c。

1. 無選項編譯連結
用法:#gcc test.c
作用:將test.c預處理、彙編、編譯並連結形成可執行檔案。這裡未指定輸出檔案,預設輸出為a.out。

2. 選項 -o
用法:#gcc test.c -o test
作用:將test.c預處理、彙編、編譯並連結形成可執行檔案test。-o選項用來指定輸出檔案的檔名。

3. 選項 -E
用法:#gcc -E test.c -o test.i
作用:將test.c預處理輸出test.i檔案。

4. 選項 -S
用法:#gcc -S test.i
作用:將預處理輸出檔案test.i彙編成test.s檔案。

5. 選項 -c
用法:#gcc -c test.s
作用:將彙編輸出檔案test.s編譯輸出test.o檔案。

6. 無選項鍊接
用法:#gcc test.o -o test
作用:將編譯輸出檔案test.o連結成最終可執行檔案test。

7. 選項-O
用法:#gcc -O1 test.c -o test
作用:使用編譯優化級別1編譯程式。級別為1~3,級別越大優化效果越好,但編譯時間越長。

二. 多原始檔的編譯方法

如果有多個原始檔,基本上有兩種編譯方法:
[假設有兩個原始檔為test.c和testfun.c]

1. 多個檔案一起編譯
用法:#gcc testfun.c test.c -o test
作用:將testfun.c和test.c分別編譯後連結成test可執行檔案。

2. 分別編譯各個原始檔,之後對編譯後輸出的目標檔案連結。

用法:
#gcc -c testfun.c //將testfun.c編譯成testfun.o
#gcc -c test.c //將test.c編譯成test.o
#gcc -o testfun.o test.o -o test //將testfun.o和test.o連結成test

以上兩種方法相比較,第一中方法編譯時需要所有檔案重新編譯,而第二種方法可以只重新編譯修改的檔案,未修改的檔案不用重新編譯。

 

如果你在前後裝了兩個或者以上版本,有時候gcc -v/-version 會反饋舊的版本。下面將實現gcc各個版本間的選擇:

方法是通過設定各個版本的優先順序來達到gcc版本的選擇;對於要選擇使用的版本,可以將它的優先順序設定高些;對於不想使用的版本,賦值一個小的優先順序號。這樣即可實現各個版本間的切換了。具體操作如下:

ubuntu系統使用的gcc版本隨著釋出版本的不同而不同,在編譯android系統時不同的版本推薦用不同的gcc去編譯,那麼可不可以改變系統的gcc來適應android編譯環境的需求呢?答案是可以的。

        先看看我們系統用的gcc和g++是什麼版本

 

1 gcc -v

        可以獲得的資訊如下

 

1 gcc version 4.4.6 (Ubuntu/Linaro 4.4.6-11ubuntu2)

 

        如果我們想使用gcc4.5怎麼辦?首先看看有沒有安裝gcc4.5,

 

1 ls /usr/bin/gcc*

        結果只有/usr/bin/gcc  /usr/bin/gcc-4.4兩個,那麼我們需要安裝

 

 

1 sudo apt-get install gcc-4.5 gcc-4.5-multilib g++-4.5 g++-4.5-multilib


        安裝好後輸入以下指令:

 

 

1 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 50
2 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.5 40


        接著輸入:

 

 

1 sudo update-alternatives --config gcc


        會看到如下的選項

 

 

view source  

print?

01 有 3 個候選項可用於替換 gcc (提供 /usr/bin/gcc)。
02  
03   選擇       路徑            優先順序  狀態
04 ------------------------------------------------------------
05 * 0            /usr/bin/gcc-4.4   50        自動模式
06   1            /usr/bin/gcc-4.4   50        手動模式
07   2            /usr/bin/gcc-4.5   40        手動模式
08   3            /usr/bin/gcc-4.6   30        手動模式
09  
10 要維持當前值[*]請按回車鍵,或者鍵入選擇的編號:


        要想用哪個gcc就輸入編號吧。

 

        同樣也要設定一下g++的

 

1 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 50
2 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.5 40

 

        如果想刪除可選項的話可以鍵入以下指令:

 

1 sudo update-alternatives --remove gcc /usr/bin/gcc-4.5


        再用gcc -v 來看一下版本是否改變了。

又一個設定gcc版本切換的文章

1、手動切換

設定後,使用時需手動進行切換選擇。

[email protected]:~# ls /usr/bin/gcc* -l
lrwxrwxrwx 1 root root 21 Sep 18 04:42 /usr/bin/gcc -> /etc/alternatives/gcc
-rwxr-xr-x 1 root root 224544 Apr 15 22:58 /usr/bin/gcc-4.4
-rwxr-xr-x 1 root root 306200 Apr 15 19:45 /usr/bin/gcc-4.6
[email protected]:~#update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 50
[email protected]:~#update-alternatives --install /usr/bin/g++ gcc /usr/bin/g++-4.4 50

選擇方法(根據編譯器選擇其一):

[email protected]:~#update-alternatives --config gcc
[email protected]:~#update-alternatives --config g++

參考選擇介面:

[email protected]:~# update-alternatives --config g++
There are 2 choices for the alternative g++ (providing /usr/bin/g++).

Selection Path Priority Status

  • 0 /usr/bin/g+±4.4 100 auto mode
    1 /usr/bin/g+±4.4 100 manual mode
    2 /usr/bin/g+±4.6 50 manual mode

Press enter to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/bin/g+±4.6 to provide /usr/bin/g++ (g++) in manual mode.
[email protected]:~#

2、設定優先順序自動

設定後,系統自動根據優先順序選擇,假設要設定gcc4.4優先於gcc4.6,設定方法如下:

update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 100
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 50
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 100
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 50
update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.4 100
update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.6 50

 

ubuntu系統使用的gcc版本隨著釋出版本的不同而不同,在編譯android系統時不同的版本推薦用不同的gcc去編譯,那麼可不可以改變系統的gcc來適應android編譯環境的需求呢?答案是可以的。

        先看看我們系統用的gcc和g++是什麼版本

 

1 gcc -v