一、先升级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!
/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程序,就会发现不会有那个报错了!问题得到解决!