注意:可能是个人水平问题,最后系统还是让我给弄挂了,我这是在虚拟机中的系统,挂了无大碍,只是一直没有找到正确的方法,有些愁苦,就这么地吧,以后再说了。下面只是自己当时的一些记录,仅供参考。
在CentOS6.5(x86_64)中安装Perl时出错,提示内容是:perl/bin/perl: /lib64/libc.so.6: version `GLIBC_2.14′ not found (required by perl/bin/perl)
# 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
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 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.14啊。
最新版本的Perl运行要求glibc最低版本是2.14的,所以准备安装glibc2.14,先了解一下glibc是干什么的?
glibc是gnu发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现…总的来说,不说运行在linux上的一些应用,或者你之前部署过的产品,就是很多linux的基本命令,比如cp, rm, ll之类,都得依赖于它。
有点冒汗,所以,不要装过高的版本,本身安装glibc就是有风险的,够用就行,那就装glibc2.14。
Glibc全部版本 http://ftp.gnu.org/gnu/glibc/
# wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
# tar -zxvf glibc-2.14.tar.gz
# cd ./glibc-2.14
# ls
Makefile ifunc-defines.h.d locale shlib.lds
Versions.all inet locale-defines.h signal
Versions.def.v intl locale-defines.h.d socket
Versions.def.v.i io localedata soversions.i
Versions.tmp ld.map login soversions.mk
Versions.v libBrokenLocale.map lowlevelbarrier.h stamp.o
Versions.v.i libanl.map lowlevelbarrier.h.d stamp.oS
abi-versions.h libc-abis.h lowlevelcond.h stamp.os
argp libc-abis.stamp lowlevelcond.h.d stdio-common
assert libc.a lowlevelrobustlock.h stdlib
bits libc.map lowlevelrobustlock.h.d streams
catgets libc.so lowlevelrwlock.h string
config.h libc.so.6 lowlevelrwlock.h.d structsem.h
config.log libc_nonshared.a malloc structsem.h.d
config.make libc_pic.a manual sunrpc
config.status libc_pic.os math sysd-rules
conform libcidn.map misc sysd-sorted
crypt libcrypt.map nis sysd-syscalls
csu libdl.map nptl sysd-versions
ctype libidn nptl_db sysvipc
debug libio nscd tcb-offsets.h
dirent libm.map nss tcb-offsets.h.d
dlfcn libnsl.map po termios
dummy.c libnss_compat.map posix testrun.sh
dummy.o libnss_dns.map pthread-errnos.h time
dummy.o.dt libnss_files.map pthread-errnos.h.d timezone
elf libnss_hesiod.map pthread-pi-defines.h tls.make
format.lds libnss_nis.map pthread-pi-defines.h.d tlsdesc.h
gmon libnss_nisplus.map pwd tlsdesc.h.d
gnu libpthread.map resolv ucontext_i.h
gnulib libresolv.map resource ucontext_i.h.d
grp librt.map rt unwindbuf.h
gshadow libthread_db.map s-proto-bp.d unwindbuf.h.d
hesiod libutil.map setjmp wcsmbs
iconv link-defines.h shadow wctype
iconvdata link-defines.h.d shlib-versions.v
ifunc-defines.h linkobj shlib-versions.v.i
# mkdir build
# cd ./build
# ../configure --prefix=/var/opt/glibc-2.14
# make -j4
# make install
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
# tar -zxvf glibc-2.14.tar.gz
# cd ./glibc-2.14
# ls
Makefileifunc-defines.h.dlocaleshlib.lds
Versions.allinetlocale-defines.hsignal
Versions.def.vintllocale-defines.h.dsocket
Versions.def.v.iiolocaledatasoversions.i
Versions.tmpld.maploginsoversions.mk
Versions.vlibBrokenLocale.maplowlevelbarrier.hstamp.o
Versions.v.ilibanl.maplowlevelbarrier.h.dstamp.oS
abi-versions.hlibc-abis.hlowlevelcond.hstamp.os
argplibc-abis.stamplowlevelcond.h.dstdio-common
assertlibc.alowlevelrobustlock.hstdlib
bitslibc.maplowlevelrobustlock.h.dstreams
catgetslibc.solowlevelrwlock.hstring
config.hlibc.so.6lowlevelrwlock.h.dstructsem.h
config.loglibc_nonshared.amallocstructsem.h.d
config.makelibc_pic.amanualsunrpc
config.statuslibc_pic.osmathsysd-rules
conformlibcidn.mapmiscsysd-sorted
cryptlibcrypt.mapnissysd-syscalls
csulibdl.mapnptlsysd-versions
ctypelibidnnptl_dbsysvipc
debuglibionscdtcb-offsets.h
direntlibm.mapnsstcb-offsets.h.d
dlfcnlibnsl.mappotermios
dummy.clibnss_compat.mapposixtestrun.sh
dummy.olibnss_dns.mappthread-errnos.htime
dummy.o.dtlibnss_files.mappthread-errnos.h.dtimezone
elflibnss_hesiod.mappthread-pi-defines.htls.make
format.ldslibnss_nis.mappthread-pi-defines.h.dtlsdesc.h
gmonlibnss_nisplus.mappwdtlsdesc.h.d
gnulibpthread.mapresolvucontext_i.h
gnuliblibresolv.mapresourceucontext_i.h.d
grplibrt.maprtunwindbuf.h
gshadowlibthread_db.maps-proto-bp.dunwindbuf.h.d
hesiodlibutil.mapsetjmpwcsmbs
iconvlink-defines.hshadowwctype
iconvdatalink-defines.h.dshlib-versions.v
ifunc-defines.hlinkobjshlib-versions.v.i
# mkdir build
# cd ./build
# ../configure --prefix=/var/opt/glibc-2.14
# make -j4
# make install
抽根烟,等一会…
安装完成。
# strings libc.so | 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
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# strings libc.so | 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出现了,但/lib64/libc.so.6还是指向2.12这个旧版本,如下:
# ls -l /lib64/libc.so.6
lrwxrwxrwx. 1 root root 12 Jan 11 2017 /lib64/libc.so.6 -> libc-2.12.so
0
1
# ls -l /lib64/libc.so.6
lrwxrwxrwx.1rootroot12Jan112017/lib64/libc.so.6->libc-2.12.so
做个带版本号的软连接放在lib64文件夹下
# ln -s /var/opt/glibc-2.14/lib/libc-2.14.so /lib64/libc-2.14.so
0
# ln -s /var/opt/glibc-2.14/lib/libc-2.14.so /lib64/libc-2.14.so
备份一个libc.so.6文件为libc2.so.6,可能会有用的,如果安装成功就删除这个备份。
# cp -rf /lib64/libc.so.6 /lib64/libc2.so.6
0
# cp -rf /lib64/libc.so.6 /lib64/libc2.so.6
先删除/lib64/libc.so.6文件,在删除前服务器或者是VM能拍快照就拍一张,出问题了可以回滚。
# rm -rf /lib64/libc.so.6
0
# rm -rf /lib64/libc.so.6
前面加上临时环境变量,再做软件连接。这个软连接的意思就是使文件/lib64/libc.so.6调用它的同级的刚才创建的带版本号的软连接libc-2.14.so
# LD_PRELOAD=/lib64/libc-2.14.so ln -s libc-2.14.so /lib64/libc.so.6
0
# LD_PRELOAD=/lib64/libc-2.14.so ln -s libc-2.14.so /lib64/libc.so.6
验证libc.so.6文件指向,正常的话会显示一个箭头指向
# ll /lib64/libc.so.6
lrwxrwxrwx. 1 root root 12 Nov 16 02:49 /lib64/libc.so.6 -> libc-2.14.so
0
1
# ll /lib64/libc.so.6
lrwxrwxrwx.1rootroot12Nov1602:49/lib64/libc.so.6->libc-2.14.so
再输入一些其它一些常用命令(yum,cd,ls,python -V,perl -V)等,看是否正常。
至此,更新安装glibc完成。
注:一些出错提示:error while loading shared libraries: /lib64/libc.so.6: invalid ELF header
因为所有命令的运行都是靠这个文件(/lib64/libc.so.6),所以当删除它时,就会出现上面的提示,