機房一臺centos6.9機器部署了jenkins釋出系統,開發人員在用node編譯js,發現依賴的gcc版本低了,故需要將gcc升級到高版本(至少5.0版本以上),這裡選擇升級到6.4.0版本,下面是升級的操作記錄:
1)檢視系統版本 [root@uatjenkins01 ~]# cat /etc/redhat-release CentOS release 6.9 (Final) 2)檢視預設的gcc版本 [root@uatjenkins01 ~]# gcc --version gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18) Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 3)檢視預設動態庫 [root@uatjenkins01 ~]# 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 4)低版本的gcc,不支援c++11的新特性。驗證如下: [root@uatjenkins01 ~]# vim /tmp/tryCpp11.cc #include <iostream> #include <memory> int main() { std::shared_ptr<int> pInt(new int(5)); std::cout << *pInt << std::endl; return 0; } [root@uatjenkins01 ~]# cd /tmp/ [root@uatjenkins01 tmp]# g++ -std=c++11 -o tryCpp11 tryCpp11.cc cc1plus: error: unrecognized command line option "-std=c++11" 5)下載gcc [root@uatjenkins01 ~]# yum -y install xz [root@uatjenkins01 ~]# cd /usr/local/src/ [root@uatjenkins01 src]# wget http://ftp.gnu.org/gnu/gcc/gcc-6.4.0/gcc-6.4.0.tar.xz [root@uatjenkins01 src]# tar -xf gcc-6.4.0.tar.xz -C /usr/src [root@uatjenkins01 src]# cd /usr/src/gcc-6.4.0 [root@uatjenkins01 gcc-6.4.0]# ./contrib/download_prerequisites ============================================================================================== 上面命令在編譯gcc時會自動下載mpfr-2.4.2.tar.bz2、gmp-4.3.2.tar.bz2、mpc-0.8.1.tar.gz和isl-0.15.tar.bz2軟體包,由於網速不給力時,可能會出現無法下載 的情況,所以可以事先將這4個軟體包放至在/usr/src/gcc-6.4.0目錄下,並解壓! 四個軟體包的百度下載地址:https://pan.baidu.com/s/11oC6Z5Jxe8kjsmWEoXYczg 提取密碼:qqgk 下載到/usr/local/src/目錄下 [root@uatjenkins01 gcc-6.4.0]# pwd /usr/src/gcc-6.4.0 [root@uatjenkins01 gcc-6.4.0]# cp /usr/local/src/mpfr-2.4.2.tar.bz2 ./ [root@uatjenkins01 gcc-6.4.0]# cp /usr/local/src/gmp-4.3.2.tar.bz2 ./ [root@uatjenkins01 gcc-6.4.0]# cp /usr/local/src/mpc-0.8.1.tar.gz ./ [root@uatjenkins01 gcc-6.4.0]# cp /usr/local/src/isl-0.15.tar.bz2 ./ [root@uatjenkins01 gcc-6.4.0]# tar -xf mpfr-2.4.2.tar.bz2 [root@uatjenkins01 gcc-6.4.0]# tar -xf gmp-4.3.2.tar.bz2 [root@uatjenkins01 gcc-6.4.0]# tar -xf mpc-0.8.1.tar.gz [root@uatjenkins01 gcc-6.4.0]# tar -xf isl-0.15.tar.bz2 [root@uatjenkins01 gcc-6.4.0]# ln -sv mpfr-2.4.2 mpfr [root@uatjenkins01 gcc-6.4.0]# ln -sv gmp-4.3.2 gmp [root@uatjenkins01 gcc-6.4.0]# ln -sv mpc-0.8.1 mpc [root@uatjenkins01 gcc-6.4.0]# ln -sv isl-0.15 isl 如果提前把這四個軟體包放在gcc-6.4.0目錄下並解壓了,如上操作,那麼就不需要再執行上面的"./contrib/download_prerequisites"這一步了! ============================================================================================== [root@uatjenkins01 gcc-6.4.0]# ll -d gmp-4.3.2* drwxrwxrwx 15 1001 wheel 4096 Jan 8 2010 gmp-4.3.2 -rw-r--r-- 1 root root 1897483 Aug 10 16:55 gmp-4.3.2.tar.bz2 [root@uatjenkins01 gcc-6.4.0]# ll -d isl-0.15* drwxrwxr-x 9 1000 1000 12288 Jun 11 2015 isl-0.15 -rw-r--r-- 1 root root 1574964 Aug 10 17:03 isl-0.15.tar.bz2 [root@uatjenkins01 gcc-6.4.0]# ll -d mpc-0.8.1* drwxrwxrwx 5 1000 1000 4096 Dec 8 2009 mpc-0.8.1 -rw-r--r-- 1 root root 544950 Aug 10 16:57 mpc-0.8.1.tar.gz [root@uatjenkins01 gcc-6.4.0]# ll -d mpfr-2.4.2* drwxrwxrwx 5 1114 1114 12288 Nov 30 2009 mpfr-2.4.2 -rw-r--r-- 1 root root 1077886 Aug 10 16:49 mpfr-2.4.2.tar.bz2 [root@uatjenkins01 gcc-6.4.0]# ./configure -enable-checking=release -enable-languages=c,c++ -disable-multilib [root@uatjenkins01 gcc-6.4.0]# make -j4 //-j4:make對多核處理器的優化選項,讓make最多允許4個編譯命令同時執行,這樣可以更有效的利用CPU資源。此步驟非常耗時!耐心等待吧~~ [root@uatjenkins01 gcc-6.4.0]# make install [root@uatjenkins01 gcc-6.4.0]# ls /usr/local/bin | grep gcc gcc gcc-ar gcc-nm gcc-ranlib x86_64-pc-linux-gnu-gcc x86_64-pc-linux-gnu-gcc-6.4.0 x86_64-pc-linux-gnu-gcc-ar x86_64-pc-linux-gnu-gcc-nm x86_64-pc-linux-gnu-gcc-ranlib 6)配置gcc [root@uatjenkins01 gcc-6.4.0]# find / -name "libstdc++.so*" ....... /usr/src/gcc-6.4.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22 [root@uatjenkins01 gcc-6.4.0]# cd /usr/lib64 [root@uatjenkins01 lib64]# cp /usr/src/gcc-6.4.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22 libstdc++.so.6.0.22 [root@uatjenkins01 lib64]# mv libstdc++.so.6 libstdc++.so.6.old [root@uatjenkins01 lib64]# ln -sv libstdc++.so.6.0.22 libstdc++.so.6 `libstdc++.so.6' -> `libstdc++.so.6.0.22' 7)升級後驗證 檢視升級後的gcc版本(有時可能需要重啟伺服器才能看到更新後的版本) [root@uatjenkins01 lib64]# init 6 #或者reboot [root@uatjenkins01 ~]# gcc --version gcc (GCC) 6.4.0 Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 檢視最新動態庫: [root@uatjenkins01 ~]# 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 GLIBCXX_3.4.14 GLIBCXX_3.4.15 GLIBCXX_3.4.16 GLIBCXX_3.4.17 GLIBCXX_3.4.18 GLIBCXX_3.4.19 GLIBCXX_3.4.20 GLIBCXX_3.4.21 GLIBCXX_3.4.22 GLIBC_2.3 GLIBC_2.2.5 GLIBC_2.3.2 GLIBCXX_FORCE_NEW GLIBCXX_DEBUG_MESSAGE_LENGTH 升級到高版本的gcc,就支援c++11的新特性 [root@uatjenkins01 ~]# cd /tmp/ [root@uatjenkins01 tmp]# g++ -std=c++11 -o tryCpp11 tryCpp11.cc [root@uatjenkins01 tmp]# ./tryCpp11 5