linux更新glibc版本号,Linux CentOS6.5中更新为glibc2.14版本

注意:可能是个人水平问题,最后系统还是让我给弄挂了,我这是在虚拟机中的系统,挂了无大碍,只是一直没有找到正确的方法,有些愁苦,就这么地吧,以后再说了。下面只是自己当时的一些记录,仅供参考。

在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),所以当删除它时,就会出现上面的提示,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值