ld找不到lgcc,即使Ubuntu 12.10上的libgcc_.so链接没有断开

ld找不到lgcc,即使Ubuntu 12.10上的libgcc_.so链接没有断开,gcc,static-linking,ubuntu-12.10,Gcc,Static Linking,Ubuntu 12.10,我在使用gcc编译时遇到了一个问题,在Ubuntu 12.10上,编译器启用了-static,-static libgcc标志,链接器启用了-Wl,-static标志。但应用程序通过动态链接(不使用这些标志)构建良好。 /usr/bin/ld:找不到-lgcc\u s 在查看了互联网上的建议后,我发现大部分时间都是由于从/usr/lib/gcc/i686 linux gnu/x.x/libgcc_.so到/libgcc_.so.1的链接断开的问题。但在我的例子中,/usr/lib/gcc/i68

我在使用
gcc
编译时遇到了一个问题,在Ubuntu 12.10上,编译器启用了
-static
-static libgcc
标志,链接器启用了
-Wl,-static
标志。但应用程序通过动态链接(不使用这些标志)构建良好。
/usr/bin/ld:找不到-lgcc\u s
在查看了互联网上的建议后,我发现大部分时间都是由于从
/usr/lib/gcc/i686 linux gnu/x.x/libgcc_.so
/libgcc_.so.1
的链接断开的问题。但在我的例子中,
/usr/lib/gcc/i686 linux gnu/4.7/libgcc_.so
指向的是确实存在的
/lib/i386 linux gnu/libgcc_.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

有人能帮我解决这个静态链接的问题吗?如果需要进一步的细节,也请告诉我。谢谢。

您的链接器可能找不到
libgcc_.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用于存档(编译对象的集合)。

似乎
libgcc_.s.a
不存在:只有动态版本: