1. 程式人生 > >在Ubuntu14.04下安裝gcc 6.2解決C++14支援問題

在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原始碼時需要安裝GMPMPFR,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安裝完畢。

上面是我安裝gcc6.2時的命令。

配置環境變數

此時系統中存在兩個版本的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的支援問題。