CentOS 6.x安裝多GCC版本號,cmake的安裝與使用
操作系統: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的安裝與使用