Ошибка при сборке или запуске программ:
/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
/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
Спасибо, спас - такая же фигня с libcap была в 64-битной Gentoo. Помогло:)
ОтветитьУдалитьGood :)
Удалить