lgcc_s не найден ld, даже если ссылка на libgcc_s.so не нарушена в Ubuntu 12.10

У меня проблема с компиляцией gcc с -static, -static-libgcc флаги включены для компилятора и -Wl,-static флаг включен для компоновщика в Ubuntu 12.10. Но приложение прекрасно работает с динамическим связыванием (без использования этих флагов).

/usr/bin/ld: cannot find -lgcc_s

Посмотрев на предложения через Интернет, я обнаружил, что большую часть времени это проблема с неработающей ссылкой /usr/lib/gcc/i686-linux-gnu/x.x/libgcc_s.so в /lib/libgcc_s.so.1, Но в моем случае /usr/lib/gcc/i686-linux-gnu/4.7/libgcc_s.so указывает на /lib/i386-linux-gnu/libgcc_s.so.1 который существует.

$ ls -l /usr/lib/gcc/i686-linux-gnu/4.7/libgcc_s.so
lrwxrwxrwx 1 root root 33 Sep 21  2012 /usr/lib/gcc/i686-linux-gnu/4.7/libgcc_s.so -> /lib/i386-linux-gnu/libgcc_s.so.1
$ ls -l /lib/i386-linux-gnu/libgcc_s.so.1
-rw-r--r-- 1 root root 116244 Sep 21  2012 /lib/i386-linux-gnu/libgcc_s.so.1
$ file /lib/i386-linux-gnu/libgcc_s.so.1
/lib/i386-linux-gnu/libgcc_s.so.1: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x61fa08eda0f264222649f9481f9e0340567d0862, stripped

Выход из ldconfig показывает следующее:

$ sudo /sbin/ldconfig -v | grep libgcc_s
/sbin/ldconfig.real: Can't stat /lib/i686-linux-gnu: No such file or directory
/sbin/ldconfig.real: Can't stat /usr/lib/i686-linux-gnu: No such file or directory
/sbin/ldconfig.real: Path `/lib/i386-linux-gnu' given more than once
/sbin/ldconfig.real: Path `/usr/lib/i386-linux-gnu' given more than once
    libgcc_s.so.1 -> libgcc_s.so.1
/sbin/ldconfig.real: Cannot stat /usr/lib/i386-linux-gnu/libsoftokn3.so: No such file or directory
/sbin/ldconfig.real: Cannot stat /usr/lib/i386-linux-gnu/libnss_db.so: No such file or directory

Может ли кто-нибудь помочь мне решить эту проблему со статической связью? Также дайте мне знать, если какие-либо дополнительные детали необходимы. Благодарю.

1 ответ

Возможно, ваш компоновщик не может найти libgcc_s.aСтатическая версия libgcc_s.so,

Попробуйте пройти -Wl,--verbose=99 к компоновщику и посмотреть, что подходит.

У меня была похожая проблема некоторое время назад. Использование параметров компоновщика дало ответ:

...
attempt to open /long_path/usr/lib/libgcc_s.so failed
attempt to open /long_path/usr/lib/libgcc_s.a failed
attempt to open /long_path/lib/libgcc_s.a failed
attempt to open /long_path/lib/libgcc_s.so succeeded
...

Насколько я знаю, .so означает "общий объект". Я думаю .a для архива (коллекция скомпилированных объектов).

Другие вопросы по тегам