之前在一个Centos7虚拟机上运行目标程序的时候,发现自己的编译环境比目标运行机的centos7系统的glibc版本要高,运行的时候报错,说找不到GLIBC_2.18。于是在该centos7运行 strings libc.so.6 |grep GLIBC_2.1 命令,发现最GLIBC的最高版本是2.17( Ĭ ^ Ĭ )。
这样的话要么降低编译环境的GLIBC版本,要么给目标机的GLIBC升级版本。我想如果每次目标机版本低,就给自己的编译环境降低版本的话,那不是个事啊。于是想办法给目标机升级GLIBC版本吧。
当中的过程非常坎坷,弄完先写个博客把记录一下大概过程,就当做是笔记。之后有空会补上升级的操作细节过程。
刚开始头比较铁,直接把其他机器上高版本的libc-2-18.so拷贝到目标机的/lib64下,并重定向libc.so.6,然后直接炸了,目标机敲不了命令,开不了机。幸亏弄了个快照,不然整个系统废了。升级失败。
然后又到网上去搜,看到很多是先把libc-2.xx.so拷贝到/lib64下,然后用LD_PRELOAD什么的先指向新的库,接着再建立新的libc.so.6。我看完照着弄,还是不行( Ĭ ^ Ĭ ),完事了运行其他命令(如ls)好像会报错libc-linuxpthreads.so找不到之前版本的glibc库什么的。一样是差点废了整个系统。
最后网上有些文章说可以到gnu上直接下载glibc-2.18的源码编译安装(make&&make install的方式)。抱着最后的希望,到百度去搜索glibc-2.18的编译安装方法。接着先给目标机搞了个快照,然后下载glibc-2.18的源代码,然后按着那些文章说的,./configure(后面还有一些参数)、make、make install 三步走,果然成了。运行strings libc.so.6 |grep GLIBC_2.1 ,发现已经多了GLIBC_2.18。运行目标代码成功,没有再报错找不到GLIBC_2.18。