为什么有些图书馆打不开?

Why some Libraries failed to open?

我写了一个简单的C程序,prova.c
int main() {return 0;}
我想查看链接到它的库,所以:

现在,当我检查我的标准输出时,我注意到一些库无法打开。
为什么会这样?为什么他们试图打开?为什么会失败?

attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib32/crt1.o succeeded
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib32/crt1.o
attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib32/crti.o succeeded
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib32/crti.o
attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.8/32/crtbegin.o succeeded
/usr/lib/gcc/x86_64-linux-gnu/4.8/32/crtbegin.o
attempt to open prova.o succeeded
prova.o
attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.8/32/libgcc.so failed
attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.8/32/libgcc.a succeeded
attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.8/32/libgcc_s.so succeeded

您的编译命令有一个影子 -lgcc -lc 后缀,由编译器驱动程序添加。此标志不会准确告诉 linker 在哪里可以找到 libgcc 和 libc,也不会指定它们应该是静态的还是共享的。所以 linker 反复尝试在不同的目录中找到它们(通过 -L 或在 linker 脚本中从编译器传递)。默认情况下,linker 首先尝试 link 库的共享版本 (.so),然后是静态版本 (.a)。

您看到的警告 attempt to open ... failed 不是真正的失败,而是关于 link 用户搜索所需库的进度的诊断消息。