一、先升级gcc

这里配置yum源来升级

centos6系列更换阿里yum源

1.首先备份原来的cent os官方yum源

cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

2.获取阿里的yum源覆盖本地官方yum源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

3.清理yum缓存,并生成新的缓存

yum clean all
yum makecache

 

二、升级glibc版本到指定版本,也可以自己下载别的版本

 1)产生原因
是由于Linux系统的glibc版本太低,而软件编译时使用了较高版本的glibc引起的!

查看系统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

 

[root@localhost ~]# rpm -qa |grep glibc

glibc-common-2.12-1.209.el6_9.2.x86_64

glibc-2.12-1.209.el6_9.2.x86_64

glibc-headers-2.12-1.209.el6_9.2.x86_64

glibc-devel-2.12-1.209.el6_9.2.x86_64

 

可以看到最高只支持2.12版本。现在需要将glibc支持的版本升级到GLIBC_2.14

 

2)升级glibc支持的版本到GLIBC_2.14

 

到http://www.gnu.org/software/libc/下载最新版本,这里下载了glibc-2.14.tar.xz 这个版本,解压到/usr/local/src目录下

百度云盘下载地址:https://pan.baidu.com/s/1YGia4YD45s42xMq9VapJow

提取密码:nejp

 

[root@uatblockchain01 ~]# cd /usr/local/src/

[root@uatblockchain01 src]# ll

total 9888

-rw-r--r-- 1 root root 10122492 Apr  8 03:21 glibc-2.14.tar.xz

[root@uatblockchain01 src]# tar -vxf glibc-2.14.tar.xz

 

创建/var/VMdisks,将解压后的glibc-2.14移到/var/VMdisks目录下

[root@uatblockchain01 src]# mkdir -p /var/VMdisks

[root@uatblockchain01 src]# mv glibc-2.14 /var/VMdisks/

 

在glibc源码目录建立构建目录,并cd进入构建目录

[root@uatblockchain01 src]# cd /var/VMdisks/glibc-2.14/

[root@uatblockchain01 glibc-2.14]# mkdir build && cd build/

[root@uatblockchain01 build]# ../configure --prefix=/usr/local/glibc-2.14

[root@uatblockchain01 build]# make -j4

[root@uatblockchain01 build]# make install

 

执行make install时出现:

/media/linux_install_ai/glibc-2.14/build/elf/ldconfig:

Can't open configuration file/opt/glibc-2.14/etc/ld.so.conf: No such file or directory

make[1]: Leaving directory`/media/linux_install_ai/glibc-2.14'

[root@www build]# find / -name"ld.so.conf"

/etc/ld.so.conf
[root@www build]# cp/etc/ld.so.conf /opt/glibc-2.14/etc/
make install OK!

 

临时修改环境变量

[root@uatblockchain01 build]# export LD_LIBRARY_PATH=/usr/local/glibc-2.14/lib:$LD_LIBRARY_PATH

[root@uatblockchain01 build]# echo $LD_LIBRARY_PATH

/opt/glibc-2.14/lib:

================================================================================================

注意:

这里环境变量要如上一样临时修改,决不能写在/etc/profile文件里,并source使之生效!否则会导致某些shell命令执行不了。

比如:

[root@uatblockchain01 build]# vim /etc/profile

.......

export LD_LIBRARY_PATH=/usr/local/glibc-2.14/lib:$LD_LIBRARY_PATH

[root@uatblockchain01 build]# source /etc/profile

 

这样,将会出现一些命令卡住的现象。

[root@uatblockchain03 ~]# java -version      //一直卡着不动

 

[root@uatblockchain03 ~]# su - app           //一直卡着不动

 

解决办法:

将上面那条配置从/etc/profile文件里删除,然后source使之生效!

重新登录机器即可解决!

================================================================================================

 

如果是在普通用户下,就修改普通用户下的环境变量。比如这里我是在app账号下启动的leveldb程序,那么:

[app@uatblockchain01 ~]$ export LD_LIBRARY_PATH=/usr/local/glibc-2.14/lib:$LD_LIBRARY_PATH

[app@uatblockchain01 ~]$ echo $LD_LIBRARY_PATH

/opt/glibc-2.14/lib:

 

修改/lib64/libc.so.6的软链接来源,由之前的libc-2.12.so修改为libc-2.14.so

[root@uatblockchain01 ~]# cd /lib64

[root@uatblockchain01 ~]# ll libc.so.6

lrwxrwxrwx 1 root root 12 Apr  8 03:50 libc.so.6 -> libc-2.12.so

 

[root@uatblockchain01 ~]# ll /usr/local/glibc-2.14/lib/libc-2.14.so

-rwxr-xr-x 1 root root 9645192 Apr  8 03:28 /usr/local/glibc-2.14/lib/libc-2.14.so

[root@uatblockchain01 ~]# cp /usr/local/glibc-2.14/lib/libc-2.14.so /lib64/

 

删除libc-2.12.so之前的软链接

[root@uatblockchain01 ~]# unlink /lib64/libc.so.6

或者直接执行

[root@uatblockchain01 ~]# rm -f /lib64/libc.so.6

==============================================================================================

如果上面删除命令执行后,导致该机器的很多shell命令无法执行!甚至于机器无法登陆!报错如下:

error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory

 

注意:千万不要关闭当前的终端窗口,因为此时机器可能无法登陆了。只能在当前终端窗口下进行紧急修复:

[root@uatblockchain01 ~]# ldconfig

 

原因可能是:前面设置"export LD_LIBRARY_PATH= "有误导致的。

linux调用so的库文件时,搜素路径为当前路径,再是系统lib目录。

可能是由于前面提供了一个LD_PRELOAD系统变量来改变这个顺序。

设置LD_PRELOAD了后,库加载的顺序就改变了。

搜素路径为:LD_PRELOAD ,当前路径,再是系统lib目录。

==============================================================================================

 

然后做/lib64/libc.so.6新的软链接,软链接到libc-2.14.so

[root@uatblockchain01 lib64]# ln -s libc-2.14.so /lib64/libc.so.6

[root@uatblockchain01 lib64]# ll libc.so.6

lrwxrwxrwx 1 root root 12 Apr  8 03:50 libc.so.6 -> libc-2.14.so

 

最后再查看系统glibc支持的版本:

[root@uatblockchain01 lib64]# 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_PRIVATE

 

发现glibc最高可以支持到2.14版本了。

 

然后再执行leveldb程序,就会发现不会有那个报错了!问题得到解决!