一、目前為止C++11還沒有一個已經編譯好可以直接裝起來用的版本,因此必須自行去下載然後編譯出來給自己使用,編譯是基於原生g++,所以第一件事就是安裝gcc/gcc-c++ Complier
# yum install gcc gcc-c++
二、到http://mirror.hust.edu.cn/gnu/gcc下載想安裝的版本,C++11要gcc 4.8以上版本才有包含進去,這邊就下載4.9.2並解壓縮
# wget -c http://mirror.hust.edu.cn/gnu/gcc/gcc-4.9.2/gcc-4.9.2.tar.gz
# tar xvf gcc-4.9.2.tar.gz
三、下載編譯所需的套件mpc, gmp, mpfr
# cd gcc-4.9.2
# ./contrib/download_prerequisites
比較新的gcc版本會自動建立mpc, gmp, mpfr連結到實際版本的資料夾如mpc-0.8.1, gmp-4.3.2, mpfr-2.4.2,但較舊版本需自行搬動資料夾或建立連結,總之最後編譯前mpc,gmp,mpfr資料夾必須存在
四、產生makefile
# ./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
五、編譯gcc版本並安裝,非常久,建議去睡覺或做別的事吧....
# make -j4 //編譯gcc
# make install //安裝到系統lib
在第一步沒安裝gcc/gcc-c++的話會在編譯過程發生這個錯誤
configure: error: C++ compiler missing or inoperational
make[2]: \*** [configure-stage1-libcpp] Error 1
...
...
make: \*** [all] Error 2
六、隨便使用C++11的語法寫點什麼測試
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str("zxjclxrwr");
for(auto c : str)
{
cout<<c<<endl;
}
}
編譯的時候必須註明使用C++11的語法,否則編譯器會告訴你它不認得"auto"與":"這些新的syntax
# g++ -o test test.cpp -std=c++11
這時就可以正式產出執行檔並執行,但沒意外的話執行時會跳出
/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found
這是因為系統的動態函示庫還不知道你已經升級了gcc,make install並不會去主動替換這一部分,所以這時可以先檢查一下自己的GLIBCXX版本狀況
# strings /usr/lib64/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
很明顯我的環境沒有執行程式所需的GLIBCXX_3.4.14
這時回到下載編譯的gcc資料夾內的x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/ libstdc++.so.6.0.xx,將它複製到/usr/lib64底下,並重新將libstdc++.so.6鏈結到這個最新的版本
# cp x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/ libstdc++.so.6.0.xx /usr/lib64/
# cd /usr/lib64
# rm libstdc++.so.6
# ln -s libstdc++.so.6.0.xx libstdc++.so.6
應該可以順利執行剛剛編譯出來的執行檔了。
下一篇:
[C/C++] Linux(centos)下安裝C++11與Boost函式庫(二)