翔子 发表于 2014-1-8 17:54:38

LINUX 修复relocation error: /lib/tls/libc.so.6

原文: http://blog.chinaunix.net/uid-22948773-id-3568503.html

今天在做HADOOP的时候,安装JDK 1.7需要libc-2.4以上的版本,本着试试的想法,
从其他机器上COPY了一个libc-2.5.so,然后对libc.so.6重新做了一个软连接,
这一搞导致系统基本不能用了,所有的命令都报:
relocation error: /lib/tls/libc.so.6: symbol _dl_tls_get_addr_soft, version GLIBC_PRIVATE not defined in file ld-linux.so.2 with link time reference.


破坏步骤比较简单:


# mv /tmp/libc-2.5.so.
# ls -ltr
total 3552
-rwxr-xr-x1 root root   32012 Jan 312007 libthread_db-1.0.so
-rwxr-xr-x1 root root   50672 Jan 312007 librt-2.3.4.so
-rwxr-xr-x1 root root107800 Jan 312007 libpthread-2.3.4.so
-rwxr-xr-x1 root root213772 Jan 312007 libm-2.3.4.so
-rwxr-xr-x1 root root 1529008 Jan 312007 libc-2.3.4.so<--这个是老的
-rw-rw-r--1 root root 1598712 Apr 112008 libc-2.5.so               <--这个是我新复制过来的
lrwxrwxrwx1 root root      19 Jul 272008 libthread_db.so.1 -> libthread_db-1.0.so
lrwxrwxrwx1 root root      14 Jul 272008 librt.so.1 -> librt-2.3.4.so
lrwxrwxrwx1 root root      19 Jul 272008 libpthread.so.0 -> libpthread-2.3.4.so
lrwxrwxrwx1 root root      13 Jul 272008 libm.so.6 -> libm-2.3.4.so
lrwxrwxrwx1 root root      13 Jul 272008 libc.so.6 -> libc-2.3.4.so
drwxr-xr-x3 root root    4096 Dec 222009 i686
drwxr-xr-x2 root root    4096 Dec 222009 i586
drwxr-xr-x2 root root    4096 Dec 222009 i486
# rm libc.so.6
rm: remove symbolic link `libc.so.6'? y
# ln -s libc-2.5.so libc.so.6<--重新对 libc.so.6做了一个软连接
# ll
ls: relocation error: /lib/tls/libc.so.6: symbol _dl_tls_get_addr_soft, version GLIBC_PRIVATE not defined in file ld-linux.so.2 with link time reference
# ls -ltr
ls: relocation error: /lib/tls/libc.so.6: symbol _dl_tls_get_addr_soft, version GLIBC_PRIVATE not defined in file ld-linux.so.2 with link time reference
# ls -ltr
ls: relocation error: /lib/tls/libc.so.6: symbol _dl_tls_get_addr_soft, version GLIBC_PRIVATE not defined in file ld-linux.so.2 with link time reference
# ll
ls: relocation error: /lib/tls/libc.so.6: symbol _dl_tls_get_addr_soft, version GLIBC_PRIVATE not defined in file ld-linux.so.2 with link time reference
# rm libc.so.6
rm: relocation error: /lib/tls/libc.so.6: symbol _dl_tls_get_addr_soft, version GLIBC_PRIVATE not defined in file ld-linux.so.2 with link time reference
# mv libc.so.6 /tmp
mv: relocation error: /lib/tls/libc.so.6: symbol _dl_tls_get_addr_soft, version GLIBC_PRIVATE not defined in file ld-linux.so.2 with link time reference



这个时候最好不要重启OS,否则就麻烦了。

恢复步骤如下:


# export LD_PRELOAD=/lib/tls/libc-2.3.6.so
# ls -ltr
total 3552
-rwxr-xr-x1 root root   32012 Jan 312007 libthread_db-1.0.so
-rwxr-xr-x1 root root   50672 Jan 312007 librt-2.3.4.so
-rwxr-xr-x1 root root107800 Jan 312007 libpthread-2.3.4.so
-rwxr-xr-x1 root root213772 Jan 312007 libm-2.3.4.so
-rwxr-xr-x1 root root 1529008 Jan 312007 libc-2.3.4.so
-rw-rw-r--1 root root 1598712 Apr 112008 libc-2.5.so
lrwxrwxrwx1 root root      19 Jul 272008 libthread_db.so.1 -> libthread_db-1.0.so
lrwxrwxrwx1 root root      14 Jul 272008 librt.so.1 -> librt-2.3.4.so
lrwxrwxrwx1 root root      19 Jul 272008 libpthread.so.0 -> libpthread-2.3.4.so
lrwxrwxrwx1 root root      13 Jul 272008 libm.so.6 -> libm-2.3.4.so
drwxr-xr-x3 root root    4096 Dec 222009 i686
drwxr-xr-x2 root root    4096 Dec 222009 i586
drwxr-xr-x2 root root    4096 Dec 222009 i486
lrwxrwxrwx1 root root      11 Apr7 13:48 libc.so.6 -> libc-2.5.so
# rm libc.so.6
rm: remove symbolic link `libc.so.6'? y
# ln -s /lib/tls/libc-2.3.4.so /lib/tls/libc.so.6

终于搞好了,虚惊了一场。
页: [1]
查看完整版本: LINUX 修复relocation error: /lib/tls/libc.so.6