relocation error: /usr/lib64/libc.so.6: symbol _dl_starting_up, version GLIBC_PRIVATE not define

错误信息

$ ls
ls: relocation error: /usr/lib64/libc.so.6: symbol _dl_starting_up, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference
$

问题背景

  • /lib64/libc.so.6是一个软链接,指向/lib64/libc.so-2.12
  • 我有一个程序需要使用/lib64/libc.so.6,其版本应兼容GLIBC_2.17,所以我从其他Linux上找到了含有GLIBC_2.17libc.solibc.so-2.17,在将其放在该系统下后,将软链接/lib64/libc.so.6重新指向了libc.so-2.17
  • 完成上一步之后,执行命令ls,出现上面的那个错误。
  • 不止命令ls,其他的命令比如:cplnrm也基本不可用。
  • 这个问题很惊悚。

解决方式

  • 原因操作系统版本冲突。当前系统是 CentOS-6.5 ,而libc.so-2.17是在 CentOS-7.2 中拷贝过来的。当前系统依赖的是原版本的so,所以很多命令跑不起来。
  • 解决方式:使用命令sln将软链接重新设置回来。命令如下:
$ sln /lib64/libc.so-2.12 /lib64/libc.so.6

执行之后问题基本解决。

如果仍旧想使用libc.so-2.17,则需要在系统中编译安装libc.so-2.17。不过,这个问题产生的根本原因是系统版本冲突,也就是说,即便在当前系统编译安装好了新的so文件,在之后使用软件的过程中也会出现其他新的问题,所以最好还是换用最新的操作系统。


参考链接

  • 【请教】libc.so的具体作用
  • libc.so.6被删后导致系统无法使用的原因及解决方法
  • SLN(8) Linux Programmer’s Manual SLN(8)

你可能感兴趣的:(Linux,libc.so.6,_dl_starting_up,not,define,relocation,error,sln)