.ubuntu 10.04 安裝 gcc4.6.1

ubuntu 10.04自帶的gcc的版本是4.4.x
4.4對C++11 (即曾經的C++0x)的支持自然沒有 4.6好,比如Range-based for。

下載源碼包gcc-4.6.1.tar.gz                     (在這裏:    ftp://ftp.gnu.org/gnu/gcc/     )
解開得到文件夾gcc-4.6.1

../gcc-4.6.1/configure  --prefix=/usr/local/gcc-4.6.1  --enable-languages=c,c++
之所以安裝到/usr/local/gcc-4.6.1而不是默認的/usr/local下,是因爲gcc沒有提供make uninstall的功能,放在一個目錄下方便日後刪除。

最後別忘了,在.profile最後添加一行
PATH="/usr/local/gcc-4.6.0/bin:$PATH"


如果提示缺少什麼包,從源裏安裝就行了,我缺下面這三個:
libgmp3-dev
libmpfr-dev
libmpc-dev

再次執行
../gcc-4.6.1/configure --enable-languages=c,c++
這回一帆風順

然後執行
make
(這個過程較長,據說是編譯了三次,第一次是用現有的gcc4.4編譯4.6的源代碼得到4.4編譯的4.6,然後再用這個4.4編譯的4.6編譯4.6的源代碼得到4.4編譯的4.6編譯的4.6,然後再用這個4.4編譯的4.6編譯的4.6編譯4.6的源代碼得到最終的4.4編譯的4.6編譯的4.6編譯的4.6;ok,再用最後得到的這個4.6編譯標準庫)

編譯完了,最後一步,安裝
sudo make install

4.6將被安裝至/usr/local/bin下

現在你執行 gcc -v
會告訴你是4.6.1
(你的4.4還在,不過因爲路徑中/usr/local/bin排在/usr/bin前面,所以不特別指明gcc喚起的就是4.6)

==============================================================================
實證一下
下面這段代碼用了所謂的Range-based for,故而4.6可以編譯而4.4不能編譯

#include <iostream>
using namespace std;
int main()
{
    for (const auto x : { 1,2,3,5,8,13,21,34 })
        cout << x << '\n';
}

保存成hello.cpp

用4.6編譯
g++ -std\=c++0x hello.cpp -o hello
沒問題。

再用原來的4.4編譯一下看
/usr/bin/g++ -std\=c++0x hello.cpp -o hello
說有語法錯誤。

多版本支持
爲了讓ubuntu支持多個gcc版本,需要做以下設置:

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 40
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/local/gcc-4.6.1/bin/gcc 60
#選擇你需要的版本
$sudo update-alternatives --config gcc
添加新版共享庫
爲了在編譯軟件時候,可以使用到最新的共享庫
$sudo vim /etc/ld.so.conf.d/x86_64-linux-gnu.conf

添加下面內容
/usr/local/gcc-4.6.1/lib64/
保存後執行,更新共享庫

$sudo ldconfig


參考資料:

1. http://marxistprogrammer.blog.163.com/blog/static/47198981201192922811592/

2. http://blog.prosight.me/index.php/2011/07/741


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章