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
之所以安裝到
最後別忘了,在.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
說有語法錯誤。
解開得到文件夾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