9 янв. 2014 г.

Gentoo: /usr/lib64/libc.so.6: invalid ELF header

Ошибка при сборке или запуске программ:

/usr/lib64/libc.so.6: invalid ELF header

У меня эта ошибка проявилсь в следующей конфигурации:

$ ls -l /usr/lib64/libc.so.6
lrwxrwxrwx 1 root root 18 Jul  9  2013 libc.so.6 -> /usr/lib64/libc.so


$ file /usr/lib64/libc.so
/usr/lib64/libc.so: ASCII text


cat /usr/lib64/libc.so
/* GNU ld script
   Use the shared library, but some functions are only in
   the static library, so try that secondarily.  */
OUTPUT_FORMAT(elf64-x86-64)
GROUP ( /lib64/libc.so.6 /usr/lib64/libc_nonshared.a  AS_NEEDED ( /lib64/ld-linux-x86-64.so.2 ) )


$ ls -l /lib/libc.so.6
lrwxrwxrwx 1 root root 12 Jan  9 18:30 /lib/libc.so.6 -> libc-2.17.so*
 

$ file /lib/libc-2.17.so
/lib/libc-2.17.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, stripped


То есть, /usr/lib64/libc.so.6 -- это linker script (используется при линковке программы), а /lib/libc.so.6 -- это настоящая библиотека (используется при запуске программы).

Проблема проявляется, если при запуске вместо настоящей библиотеки загрузчик находит linker script.

Решение 1

$ export LD_LIBRARY_PATH=/lib64

Решение 2

# rm /usr/lib64/libc.so.6
# ln -s /lib/libc.so.6 /usr/lib64/
# ldconfig

2 комментария: