Linux(CentOS)升级gcc版本

Linux(CentOS)升级gcc版本
本⼈使⽤的是CentOS 6.2 64位系统,由于在安装系统的时候并没有勾选安装gcc编译器,因此需要⾃⾏安装gcc编译器。
系统信息查看命令:
cat /etc/redhat-release
使⽤yum安装gcc
对于配备了yum的Linux发⾏版⽽⾔,安装gcc编译器就变得so easy。我们只需要分别执⾏如下命令即可:
##安装gcc、c++编译器以及内核⽂件
yum -y install gcc gcc-c++ kernel-devel
⾃⾏安装gcc
不过使⽤yum安装的gcc并⾮当前的最新版本,⽬前gcc的最新版本为7.2.0(gcc 4.8开始全⾯⽀持C 11和C
++ 11的新特性)。如果我们想要安装最新版本的gcc,那么就需要⾃⾏安装gcc。
下载gcc安装⽂件
在安装gcc当然要先拿到gcc的安装⽂件。在这⾥我们直接通过官⽅下载gcc-4.8.5.tar.bz2(83 MB)。当然,你也可以下载gcc-4.8.(106 MB),不过该压缩⽂件要⼤出不少。
官⽅的下载地址为:ftp:///pub/gcc/releases/gcc-4.8.5/ 直接在浏览器中打开即可。
其他下载地址/gnu/gcc/gcc-4.8.5/,选择对应版本下载即可。如果⽹络ok,推荐使⽤wget下载:
wget ftp:///pub/gcc/releases/gcc-4.8.5/gcc-4.8.5.tar.bz2
编译前的准备⼯作
想要安装gcc 4.8及以上版本,你需要先安装C标准库和头⽂件,以及旧版本的c++编译器。如果你的计算机中没有这些,请执⾏以下命令(当然你也可以使⽤apt-get等其它⽅式进⾏安装,如果已经安装则⽆需再次安装):
#安装C和C++的静态库
yum install -y glibc-static libstdc++-static
#安装旧版本的gcc、c++编译器
yum install gcc gcc-c++
在这⾥,我们将gcc-4.8.5.tar.bz2解压到/usr/local/src⽬录中(当然你也可以指定其他⽬录),完整的tar命令为:
#解压gcc安装⽂件
tar jxvf gcc-4.8.5.tar.bz2 -C /usr/local/src
解压后gcc源程序的根⽬录就是/usr/local/src/gcc-4.8.5。接着,我们依次执⾏如下命令:
#转到gcc源程序根⽬录
cd /usr/local/src/gcc-4.8.5
#下载⼀些必备的依赖程序
./contrib/download_prerequisites
安装gcc需要下载诸如gmp、mpfr、mpc等依赖⽂件,执⾏download_prerequisites将会⾃动下载这些软件并解压到当前⽬录(⽂件不⼤,总共只有⼏MB,请耐⼼等待下载)。如果⽹络不OK时,可打开 ./contrib/download_prerequisites ⽂件按照⽂件中的内容下载对应版本的依赖程序,并解压到/usr/local/src/gcc-4.8.5⽬录,同时创建对应的软连接,gcc-4.8.5的download_prerequisites如下:
MPFR=mpfr-2.4.2
GMP=gmp-4.3.2
MPC=mpc-0.8.1
wget ftp:///pub/gcc/infrastructure/$MPFR.tar.bz2 || exit 1
tar xjf $MPFR.tar.bz2 || exit 1
ln -sf $MPFR mpfr || exit 1
wget ftp:///pub/gcc/infrastructure/$GMP.tar.bz2 || exit 1
旅顺时空tar xjf $GMP.tar.bz2  || exit 1
ln -sf $GMP gmp || exit 1
wget ftp:///pub/gcc/infrastructure/$ || exit 1
tar xzf $ || exit 1
ln -sf $MPC mpc || exit 1
rm $MPFR.tar.bz2 $GMP.tar.bz2 $ || exit 1
所以需要下载三个依赖程序:mpfr、gmp和mpc,在 ftp:///pub/gcc/infrastructure/ ⽬录下依次到对应的三个⽂件,并下载后放在/usr/local/src/gcc-4.8.5⽬录下,每个依赖库的⽬录使⽤ln -sf做成软连接即可。
编译安装gcc
接着,就可以对gcc进⾏编译安装了。在此之前,我们先创建⼀个⽬录mkdir /usr/local/build/gcc-4.8.5(你也可以⾃⾏指定其他⽬录)⽤于存放编译后的程序⽂件。然后我们依次执⾏如下命令:
#跳转到编译后的程序⽂件存放⽬录
cd /usr/local/build/gcc-4.8.5
#调⽤gcc源程序的configure(后⾯的参数选项可根据需要⾃⾏修改),⽤于配置gcc
/usr/local/src/gcc-4.8.5/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
#编译gcc源程序
make
#安装gcc
make install
其中执⾏make命令这⼀过程耗费的时间可能⾮常多,笔者这⾥耗费了20多分钟才编译完成。执⾏完上述命令后,我们的gcc就已经安装成功了。
GCC 和G++均安装在/usr/local/bin/ 和 /usr/local/lib ⽬录下,如果需要⾃⼰指定安装⽬录,在configure后⾯指定参数 --prefix=/your/path 即可。
解决GLIBC版本未更新问题
编译或者运⾏时,会出现GLIBC版本不到的问题,如下提⽰:
/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found
/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found
主要是因为升级时,⽣成的动态库没有替换⽼版本gcc的动态库导致的,将gcc最新版本的动态库替换系统中⽼版本的动态库即可解决。
运⾏以下命令检查动态库:
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
从以上输出可以看出,gcc的动态库还是旧版本的。说明出现这些问题,是因为升级gcc时,⽣成的动态库没有替换⽼版本gcc的动态库。
按道理说安装的时候会⾃动更新动态库,我们可以在根⽬录⼿动搜索⼀下:
find / -name libstdc++.so.6*
输出结果如下:
/usr/lib/libstdc++.so.6.0.13
/usr/lib/libstdc++.so.6
/usr/local/lib64/libstdc++.so.6.0.19-gdb.py
/usr/local/lib64/libstdc++.so.6
/usr/local/lib64/libstdc++.so.6.0.19
/usr/local/build/gcc-4.8.5/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/usr/local/build/gcc-4.8.5/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.19
/usr/local/build/gcc-4.8.5/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/usr/local/build/gcc-4.8.5/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.19
/usr/local/build/gcc-4.8.5/prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/usr/local/build/gcc-4.8.5/prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.19
/usr/lib64/libstdc++.so.6.0.13
/
usr/lib64/libstdc++.so.6
我们发现,gcc安装时把libstdc++.so.6.0.19 安装到了/usr/local/lib64下,但并没有改变/usr/lib64/libstdc++.so.6的链接指向。那么我们
将/usr/local/lib64/libstdc++.so.6.0.19⼿动拷贝到/usr/lib64/,并更新libstdc++.so.6软连接(也可以直接指
向/usr/local/lib64/libstdc++.so.6.0.19,不⽤拷贝,看各⾃的⽂件管理习惯),其中/usr/local/build/gcc-4.8.5/⽬录下的库⽂件为都是编译输出⽂件,stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.19为gcc新版本编译最终⽣成的lib库⽂件,
和/usr/local/lib64/libstdc++.so.6.0.19是⼀模⼀样的。更新lib库的操作命令如下:
cp /usr/local/lib64/libstdc++.so.6.0.19 /usr/lib64
rm -rf /usr/lib64/libstdc++.so.6
ln -s /usr/lib64/libstdc++.so.6.0.19 /usr/lib64/libstdc++.so.6
sc论坛现在再次检查动态库:
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
se18mm
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
库更新完毕。我们已经⽀持到了GLIBCXX_3.4.14-19,此时再进⾏编译,GLIBCXX的问题是没有了。 

本文发布于:2024-09-20 19:44:14,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/688395.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:安装   版本   下载   动态   需要   编译
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议