1. 程式人生 > >CentOS 6.x安裝多GCC版本號,cmake的安裝與使用

CentOS 6.x安裝多GCC版本號,cmake的安裝與使用

https 查看信息 faq stat 處理 文件夾 fonts 分享 languages

操作系統:CentOS release 6.5 (Final)

當前gcc版本號:build=x86_64-redhat-linux
? ? ? ? ? ? ? ? ? ? ? ? ? Thread model: posix
? ? ? ? ? ? ? ? ? ? ? ? ? gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)

待安裝gcc版本號:gcc-4.8.5.tar.gz

編譯新版本號的gcc之前,必須確保系統中已經安裝了低版本號的gcc編譯器。


【註】:編譯gcc前。可能須要安裝的lib文件libstdc++-devel.i686 / libstdc++-devel.x86_64

? ? ? ? ? ? ? ? 在gcc編譯階段。可能的配置參數../gcc-4.8.0/configure --enable-checking=release --enable-languages=c,c++--disable-multilib

? ? ? ? ? ? ? ? 假設不帶--disable-multilib選項,則編譯就會生成32bit和64bit的版本號。即多平臺交叉編譯,這裏就須要對應的libstdc++-devel.i686 / libstdc++-devel.x86_64


1> 獲取gcc-4.8.5安裝包,並解壓:

技術分享圖片技術分享圖片


2> 編譯前,自己主動下載所需的依賴庫。

技術分享圖片

技術分享圖片

【註】:查看該文件可知,主要是下載gmp-4.3.2、mpc-0.8.1、mpfr-2.4.2三個包。並解壓。建立軟件連接。

? ? ? ? ? ? ? ? 假設用戶不能正常使用wget?ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2

來獲取包:

? ? ? ? ? ? ? ? 1)考慮 使用curl命令curl -O?ftp://gcc.gnu.org/pub/gcc/infrastructure/$MPFR.tar.bz2?

? ? ? ? ? ? ? ? 2)查找國內鏡像源,ftp地址更改之


3>不須要手動去編譯2>中下載安裝的三個包

參考之前達人安裝編譯過程,多會有提到,在正式編譯gcc-4.8.x之前,須要手動去編譯以上的三個依賴。

但實測,在新版本號的gcc中。不須要我們去手動編譯這些東西,僅僅須要保證三個文件夾的軟鏈存在即可。

設置軟鏈。就不用去指定--with-mpc、--with-mpfr、--with-gmp三個路徑。

技術分享圖片技術分享圖片


4> 生成編譯時的配置文件

【註】:gcc-build-4.8.5是我新建立的,用來編譯gcc的文件夾,編譯gcc是不能在gcc-4.8.5的根文件夾下進行的。必須要新建一個文件夾來。

技術分享圖片

技術分享圖片

5>使用make工具編譯

技術分享圖片技術分享圖片

【註】:make -j 4聲明要採用多核來生成make文檔,加快編譯速度。假設是單核用戶,那還是算了,老實。make吧。


6> 更新系統默認的gcc版本號

技術分享圖片

技術分享圖片

說明(從最後一個參數說起):

101:版本號優先級,值越大,就越先啟用

/usr/local/bin/gcc:新的gcc文件文件夾,以上的編譯操作默認,會在路徑/usr/local下生成對應的庫文件和運行文件等。

gcc:系統調用時,在命令行中的名字,也就是路徑的一個別名吧。

/usr/bin/gcc:之前版本號gcc調用時的路徑。

完畢配置以後。能夠看到以下的相似結果:

技術分享圖片技術分享圖片

假設想要,切換回舊版本號。請參考update-alternatives --config命令。

然後。運行updatedb。更新系統文件信息,並退出當前session。又一次連接session:

技術分享圖片技術分享圖片

啊,最終編譯好了,好緊張的說!

!!!

技術分享圖片技術分享圖片


7> 更新gcc-4.8.5的庫文件

提示更新*.so依賴文件之前,編譯cmake時,遇到的錯誤例如以下:

技術分享圖片

技術分享圖片

提示我們,盡管gcc是新版本號的。可是檢測到對應的依賴庫還是舊本版的,路徑/usr/lib64/libstdc++.so.6。以下定位問題

技術分享圖片

技術分享圖片

面有兩個路徑存在libstdc++.so.6,意識到應該是系統如今默認作用的庫還是之前舊版本號的,安全起見,這裏我為舊版本號的so文件做了備份。

有兩種方法處理這個問題:

1) 建立軟鏈接(推薦):

ln -sb /usr/local/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6

技術分享圖片

最終結果:

技術分享圖片

技術分享圖片

2) 備份/usr/lib64/下的libstdc++.so.6和libstdc++.so.6.0.13,拷貝/usr/local/lib64/libstdc++.so.6、libstdc++.so.6.0.19/usr/lib64文件夾下


編譯cmake-3.5

1>自己主動配置編譯文檔

技術分享圖片


2>編譯

技術分享圖片技術分享圖片


3>查看信息

技術分享圖片技術分享圖片


4>編譯實例projectApache Arrow

cmakeproject時,指定特定的gcc、g++版本號!!

。!

!!!

WTF?

為什麽cmake一個project默認調用的編譯器還是舊版本號的。而不是新安裝的gcc-4.8.5。

技術分享圖片

技術分享圖片

盡管糾結了半天,懷疑是不是之前的gcc編譯過程有問題。可是細致確認後,肯定了是cmake本身的問題。

故參考https://cmake.org/Wiki/CMake_FAQ#Method_3_.28avoid.29:_use_set.28.29,設置對應的cmake編譯選項。

cmake -D CMAKE_C_COMPILER=/usr/local/bin/gcc -D CMAKE_CXX_COMPILER=/usr/local/bin/g++

指定新版本號GCC的路徑。編譯成功。

技術分享圖片技術分享圖片

技術分享圖片

總結:

至此,本人所需的一切工作環境均已經搭建完畢,希望本人的一些痛苦經歷不要再重現,畢竟,工作時間是寶貴的。

:)

CentOS 6.x安裝多GCC版本號,cmake的安裝與使用