如果文章有错误部分,欢迎留言评论指出,谢谢!!

因公司最近需要在Linux系统中使用虹软的API,所以需要根据下方虹软所需配置进行系统升级
虹软所需的配置:

  • 库依赖GLIBC 2.17及以上
  • 库依赖GLIBCXX 3.4.19及以上
  • 编译器GCC 4.8.2及以上

系统环境:CentOS release 6.10 (Final)

[root@localhost ~]# cat /etc/system-release
CentOS release 6.10 (Final)

一、GLIBC编译安装

升级版本: GLIBC_2.18

此步骤一定要小心操作,否则很容易出命令无法执行等各种问题!!!!!!
如非必要,不要动服务器GLIBC配置

1.查看本地服务器安装版本
[root@localhost ~]# rpm -qa |grep glibc
glibc-common-2.12-1.212.el6_10.3.x86_64
glibc-devel-2.12-1.212.el6_10.3.x86_64
2.查看本地服务器支持glibc版本
[root@localhost ~]# strings /lib64/libc.so.6 |grep GLIBC_*
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE

由上可以看出最高支持的仅为2.12版本的glibc

3.编译安装GLIBC_2.18版本,解决问题
3.1.下载二进制包

因GLIBC官网下载地址无法直接访问
所在使用北京交通大学下载源:https://mirror.bjtu.edu.cn/gnu/libc/glibc-2.18.tar.gz

[root@localhost ~]# cd /opt/
[root@localhost opt]# wget https://mirror.bjtu.edu.cn/gnu/libc/glibc-2.18.tar.gz
[root@localhost opt]# tar -xvf glibc-2.18.tar.gz
3.2.编译安装

**操作需要格外谨慎,一个误操作就有可能导致系统命令无法使用
下方执行configure命令的时候,要用"–prefix"参数地址必须需要指定为/usr,这样就不用后期再手动替换系统原libc.so.6文件,避免出错

[root@localhost opt]# cd glibc-2.18
[root@localhost opt]# mkdir build && cd build
[root@localhost build]# ../configure --prefix=/usr
[root@localhost build]# make -j4
[root@localhost build]# make install
4.安装完成测试
[root@localhost build]# strings /lib64/libc.so.6 |grep GLIBC_*
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_2.18
GLIBC_PRIVATE

出现以上信息,代表GLIBC安装完成,恭喜!!!!!!

二、升级GLIBCXX

升级版本: GLIBCXX_3.4.20

1.查看本地服务器支持版本
[root@localhost ~]# strings /usr/lib64/libstdc++.so.6 |grep GLIBCXX*
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_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

可以看出最高支持版本仅为GLIBCXX_3.4.13版本

2.编译安装GLIBC_3.4.20
2.1.下载所需软件包

GLIBCXX下载地址:http://ftp.de.debian.org/debian/pool/main/g/gcc-4.9/libstdc++6_4.9.2-10+deb8u1_amd64.deb
因该网站使用的内部服务器无法直接wget下载,所以采用在Windows上访问下载后导入至服务器中
如果无法下载,可以使用我上传在CSDN的免费文件,也可以在下方百度网盘中下载(只有几百k,下载很快的!)
链接:https://pan.baidu.com/s/1hXqFBzLBmSIA_XWg5Rl99Q
提取码:jkpx
#####################################################
注:
这里因为我的服务器是64位系统,所以下载使用的是64位软件包 查看服务器是多少位的可以用 uname -r 查看

[root@localhost ~]# uname -r
2.6.32-754.el6.x86_64

如果你的服务器是32位的,请使用下方我已经下载好的软件包:
链接:https://pan.baidu.com/s/1tY8quC2kWyGLJHHGZ6LFyg
提取码:zznm
ps:当时我就是因为没注意64和32位的区别,安装gcc时导致出现libstdc++.so.6: wrong ELF class: ELFCLASS32问题

2.2.进行安装

将上边下载的文件拷贝到服务器目录中(我这里拷贝至/opt/glibcxx目录下)

2.2.1.解压
[root@localhost ~]# cd /opt
[root@localhost opt]# mkdir glibcxx&& cd glibcxx
[root@localhost glibcxx]# ar -x libstdc++6_4.9.2-10+deb8u1_amd64.deb
[root@localhost glibcxx]# xz -d data.tar.xz
[root@localhost glibcxx]# tar -xf data.tar
2.2.2.查看解压文件并使用
[root@localhost glibcxx]# ls
control.tar.gz  data.tar  debian-binary  libstdc++6_4.9.2-10+deb8u1_amd64.deb  usr
[root@localhost glibcxx]# ll usr/lib/x86_64-linux-gnu/
总用量 988
lrwxrwxrwx. 1 root root      19 12月 21 00:52 libstdc++.so.6 -> libstdc++.so.6.0.20
-rw-r--r--. 1 root root 1008120 2月   1 2018 libstdc++.so.6.0.20
[root@localhost glibcxx]# cp usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20 /usr/lib64/
[root@localhost glibcxx]# ln -s /usr/lib64/libstdc++.so.6.0.20 /usr/lib64/libstdc++.so.6
3.简单测试
[root@localhost glibcxx]# strings /usr/lib64/libstdc++.so.6 |grep GLIBCXX
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_DEBUG_MESSAGE_LENGTH

可以看到,已经支持GLIBCXX_3.4.20版本!!!

ps:相较于GLIBC安装,这个GLIBCXX相对来说比较简单,替换文件就好,危险性较低

三、GCC编译安装

升级方式: 安装GCC-4.8.2
安装说明:
gcc运行需要依赖mpfr、gmp、mpc三个包
gcc的文件中有自己下载依赖包的脚本:gcc-4.8.2/contrib/download_prerequisites

ps:如果服务器可以访问gcc官网,那就随意执行此脚本下载依赖包咯!

如果服务器和我操作环境一样无法直接直接下载,那就接着往下看,下边有详细的离线安装流程

1.下载gcc软件包

因为gcc对依赖包的版本也有一定的要求,所以……
查看上方说明的那个gcc文件中自动下载依赖包的脚本,里边会说明gcc需要的依赖包及具体版本,根据提示的网站及版本下载即可

gcc官方下载地址: ftp://gcc.gnu.org/pub/gcc/releases/gcc-4.8.2/gcc-4.8.2.tar.gz
gmp官方下载地址: ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
mpfr官方下载地址: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
mpc官方下载地址: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz

如果ftp无法打开,可以试试把“ftp”改成“https”访问下载

我这里已经下载好了,并且测试可用了,合起来一共也就一百多M,下载很快的,不用担心!
链接:https://pan.baidu.com/s/1Eca-y-JiqPmgO9BYdqkkIw
提取码:naiv

2.安装gcc各依赖包

!!!因三个依赖包之间也存在依赖关系,所以先行安装gmp

2.1.安装gmp

拷贝gmp-4.3.2.tar.bz2包至/opt目录下
解压

[root@localhost opt]# cd /opt/
[root@localhost opt]# tar xjf gmp-4.3.2.tar.bz2
[root@localhost opt]# cd gmp-4.3.2

编译安装

[root@localhost gmp-4.3.2]# ./configure --prefix=/usr/local/gmp-4.3.2		生成Makefile

ps:这里可以使用–prefix指定gmp安装位置,如上述我使用的命令,就可以将gmp安装于/usr/local/mpfr-2.4.2目录内,以便于后期管理,如果不使用–prefix,则都默认安装在/usr/local/bin,/usr/local/lib,/usr/local/include

[root@localhost gmp-4.3.2]# make		##编译
[root@localhost gmp-4.3.2]# make install		##安装

!!!注!!!
如果编译安装过程中有error,可在当前编译目录打开config.log文件排错。这个文件记录的信息非常全,包含了安装过程中所必须的系统环境参数的诊断结果,遇到问题后,耐心分析这个文件,肯定可以找到原因的。

2.2.安装mpfr

拷贝mpfr-2.4.2.tar.bz2包至/opt目录下
解压

[root@localhost opt]# cd /opt/
[root@localhost opt]# tar xjf mpfr-2.4.2.tar.bz2
[root@localhost opt]# cd mpfr-2.4.2

编译安装

[root@localhost mpfr-2.4.2]# ./configure --prefix=/usr/local/mpfr-2.4.2 \
--with-gmp-include=/usr/local/gmp-4.3.2/include \
--with-gmp-lib=/usr/local/gmp-4.3.2/lib

ps:如果上边安装gmp时,指定了prefix的参数,那么安装mpfr时,必须要添加指定gmp安装文件位置的参数“–with-gmp-include”和“–with-gmp-lib”,例子请参考该步骤的执行命令,如果上边安装未指定prefix则不用添加–with…参数

[root@localhost mpfr-2.4.2]# make
[root@localhost mpfr-2.4.2]# make install

!!!注!!!
同上,如果编译安装过程中有error,可在当前编译目录打开config.log文件排错。

2.3.安装mpc

拷贝mpc-0.8.1.tar.gz包至/opt目录下
解压

[root@localhost opt]# cd /opt/
[root@localhost opt]# tar xf mpc-0.8.1.tar.gz
[root@localhost opt]# cd mpc-0.8.1

编译安装

[root@localhost mpc-0.8.1]# ./configure --prefix=/usr/local/mpc-0.8.1 \
--with-gmp-include=/usr/local/gmp-4.3.2/include \
--with-gmp-lib=/usr/local/gmp-4.3.2/lib \
--with-mpfr-include=/usr/local/mpfr-2.4.2/include \
--with-mpfr-lib=/usr/local/mpfr-2.4.2/lib

ps:如果上边安装时,指定了prefix的参数,那么安装mpc时,必须要添加指定gmp和mpfr的安装文件位置的参数“–with-gmp-include”和“–with-gmp-lib”,例子请参考该步骤的执行命令,如果上边安装未指定prefix则不用添加–with…参数

[root@localhost mpfr-2.4.2]# make
[root@localhost mpc-0.8.1]# make install

!!!注!!!
同上,如果编译安装过程中有error,可在当前编译目录打开config.log文件排错。

2.4.配置环境变量

三个依赖包安装成功之后,可以配置一个环境变量,以便gcc安装及使用的时候去调用

配置之后就不用在gcc安装过程中执行configure时添加–with-…参数

[root@localhost opt]# echo "export LD_LIBRARY_PATH=:/usr/local/gmp-4.3.2/lib:/usr/local/mpfr-2.4.2/lib:/usr/local/mpc-0.8.1/lib" >> /etc/profile
[root@localhost gcc-4.8.2]# source /etc/profile		##重刷环境变量
3.安装gcc

拷贝gcc-4.8.2.tar.gz包至/opt目录下
解压

[root@localhost opt]# cd /opt/
[root@localhost opt]# tar zxf gcc-4.8.2.tar.gz
[root@localhost opt]# cd gcc-4.8.2

编译安装
此次make编译会使用大概一个小时左右的时间,耐心等候就好

[root@localhost gcc-4.8.2]# ./configure --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++
[root@localhost gcc-4.8.2]# make
[root@localhost gcc-4.8.2]# make install

!!!注!!!
如果configure失败,那就删掉上个步骤配置的环境变量,执行下边命令即可

[root@localhost gcc-4.8.2]# ./configure --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ \
--with-gmp-include=/usr/local/gmp-4.3.2/include \
--with-gmp-lib=/usr/local/gmp-4.3.2/lib \
--with-mpfr-include=/usr/local/mpfr-2.4.2/include \
--with-mpfr-lib=/usr/local/mpfr-2.4.2/lib \
--with-mpc-include=/usr/local/mpc-0.8.1/include \
--with-mpc-lib=/usr/local/mpc-0.8.1/lib

默认gcc等执行命令存在于/usr/local/bin目录下

4.测试
[root@localhost gcc-4.8.2]# gcc -v
[root@localhost gcc-4.8.2]# g++ -v
[root@localhost gcc-4.8.2]# c++ -v

如果查看到的版本是我们本次安装的版本号,那么恭喜~完成安装!!!!!!!

如果查看到的版本不是我们本次安装的版本号,那么先不要慌,请看下一个步骤↓↓↓↓↓↓↓↓↓

5.gcc多版本调整

在Linux系统中,如果安装新版gcc之前就已经存在一个gcc版本,那么我们使用“gcc -v”命令查看的版本号,有可能仍然是之前的版本
因为gcc命令是调用/usr/bin目录下的可执行文件,所以此时我们只需要备份当前/usr/bin下的gcc文件,将新版本的可执行文件软链接过去即可
先测试一下新版gcc命令是否在/usr/local/bin目录下

[root@localhost local]# /usr/local/bin/gcc -v
使用内建 specs。
COLLECT_GCC=/usr/local/bin/gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.2/lto-wrapper
目标:x86_64-unknown-linux-gnu
配置为:./configure --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++
线程模型:posix
gcc 版本 4.8.2 (GCC)

由上可见,新版gcc可执行文件存在于/usr/local/bin目录下
下面我们就只用把新版本的gcc文件建立一个软链接至/usr/bin目录下即可
操作步骤

[root@localhost gcc-4.8.2]# mkdir /usr/local/{gcc-4.4.7,g++-4.4.7,c++-4.4.7}
[root@localhost gcc-4.8.2]# mv /usr/bin/gcc /usr/local/gcc-4.4.7/
[root@localhost gcc-4.8.2]# mv /usr/bin/g++ /usr/local/g++-4.4.7/
[root@localhost gcc-4.8.2]# mv /usr/bin/c++ /usr/local/c++-4.4.7/
[root@localhost gcc-4.8.2]# ln -s /usr/local/bin/gcc /usr/bin/gcc
[root@localhost gcc-4.8.2]# ln -s /usr/local/bin/g++ /usr/bin/g++
[root@localhost gcc-4.8.2]# ln -s /usr/local/bin/c++ /usr/bin/c++

最后验证

[root@localhost gcc-4.8.2]# gcc -v
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.2/lto-wrapper
目标:x86_64-unknown-linux-gnu
配置为:./configure --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++
线程模型:posix
gcc 版本 4.8.2 (GCC)

恭喜,大功告成!!!!!!

Logo

更多推荐