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
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 |