在Ubuntu14.04下安裝gcc 6.2解決C++14支援問題
在學習《C++ Primer》時,我用的環境是Ubuntu14.04,採用DPKG機制最新能使用的gcc版本是4.8.4,雖然這個版本已經對C++11支援的已經很好了,但是還是有一些小問題。
例如,對於string型別,可以使用insert(p,b,e) 將迭代器b,e指定範圍內的元素插入到迭代器p指向的元素之前。在c++11標準下,insert返回的是第一個新加入元素的迭代器,舊版本中返回void;在使用g++ 4.8進行編譯的時候會報錯,提醒insert返回的是void型別,無法用上述函式返回一個迭代器。
解決上述問題可以通過安裝更高版本的gcc來解決問題,我安裝的是gcc5.3.0來解決。
下載解壓縮
從gcc映象站點上下載GCC5.3,可供下載的檔案有兩種形式:gcc-5.3.0.tar.gz和gcc-5.3.0.tar.bz2。兩種檔案的內容都是一樣的。
通過tar -xzvf gcc-5.3.0.tar.gz 或者tar -xjvf gcc-5.3.0.tar.gz 解壓相應的檔案,解壓後得到目錄gcc-5.3.0,在gcc-5.3.0/INSTALL裡面有詳細的安裝說明。
安裝依賴
編譯gcc原始碼時需要安裝GMP,MPFR,MPC三個依賴,下載最新版本。我下的三個版本分別是gmp-6.1.0,mpc-1.0.3,mpfr-3.1.3。
最先安裝GMP,解壓GMP的壓縮包後,得到原始碼目錄gmp-6.1.0。在該目錄的同級目錄下建立一個臨時的編譯目錄,這裡命名為temp。為了防止在安裝目錄下編譯產生的目錄產生混亂,然後開始配置安裝選項,進入temp目錄,輸入以下命令進行配置:
../gmp-6.1.0/configure –prefix=/usr/local/gmp-6.1.0
make & make install
./configure -prefix=/usr/local/gmp-6.1.1
之後清空temp,安裝MPFR,配置的時候需要新增依賴關係
rm -r *
../mpfr-3.1.3/configure –prefix=/usr/local/mpfr-3.1.3 –with-gmp=/usr/local/gmp-6.1.0
./configure -prefix=/usr/local/mpfr-3.1.5 -with-gmp=/usr/local/gmp-6.1.1
最後安裝MPC,清空temp新增GMP,MPFR依賴。
rm -r *
../mpc-1.0.3/configure –prefix=/usr/local/mpc-1.0.3 –with-gmp=/usr/local/gmp-6.1.0 –with-mpfr=/usr/local/mpfr-3.1.3
./configure -prefix=/usr/local/mpc-1.0.3 -with-gmp=/usr/local/gmp-6.1.1 -with-mpfr=/usr/local/mpfr-3.1.5
安裝好這三個依賴之後才可以安裝gcc,否則編譯的時候會報錯
編譯安裝GCC
再次清空temp首先配置GCC,在temp資料夾中執行以下命令,注意,此時temp和gcc-5.3.0在同級目錄下
../gcc-5.3.0/configure –prefix=/usr/local/gcc-5.3 –enable-threads=posix –disable-checking –disable-multilib –enable-languages=c,c++,java,objc –with-gmp=/usr/local/gmp-6.1.0 –with-mpfr=/usr/local/mpfr-3.1.3 –with-mpc=/usr/local/mpc-1.0.3
./configure -prefix=/usr/local/gcc-6.2 -enable-threads=posix -disable-checking -disable-multilib -enable-languages=c,c++,java
-with-gmp=/usr/local/gmp-6.1.1 -with-mpfr=/usr/local/mpfr-3.1.5 -with-mpc=/usr/local/mpc-1.0.3
在配置時,對於語言language=選項,可以根據自己需要的編譯器選擇語言。
make
sudo make install
至此GCC5.3安裝完畢。
配置環境變數
此時系統中存在兩個版本的gcc,一個是/usr/bin/gcc , 另一個是/usr/local/gcc-5.3/ 如不修改環境變數,在每次呼叫5.3版本的gcc時都需要指定路徑。為了方便使用,可以在/usr/bin目錄下做一個符號連結
cd /usr/bin
ln -s /usr/local/gcc-5.3/bin/gcc gcc53
ln -s /usr/local/gcc-5.3/bin/g++ g++53
這樣就可以使用gcc53 g++53來呼叫程式了,舊版本的gcc,g++仍然可以適用。
對於庫路徑同樣需要設定下,這樣,保證在呼叫庫函式的時候可以適用到新版編譯器的庫函式,在etc/profile檔案中適用root許可權新增如下程式碼
export LD_LIBRARY_PATH=/usr/local/gcc-5.3/lib:/usr/local/gcc-5.3/lib64:$LD_LIBRARY_PATH
- 1
- 1
登出重新登入,使變數生效
至此,gcc5.3安裝完畢,解決了上述C++11的支援問題。