我写了一个简单的C程序,prova.c
gcc -Wall -m32 -stdc=99 -c prova.c -o prova.o
我想查看链接到它的库,所以:
gcc -m32 -Wl,--verbose prova.o -o prova
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
现在,当我检查我的标准输出时,我注意到一些图书馆无法打开 为什么会这样?为什么他们试图打开?为什么会失败?
{{1}}
答案 0 :(得分:2)
您的编译命令后缀为-lgcc -lc
,由编译器驱动程序添加。此标志不会准确地告诉链接器libgcc和libc的位置,也不指定它们应该是静态的还是共享的。因此,链接器会反复尝试在各种目录中找到它们(通过-L
或链接器脚本从编译器传递)。默认情况下,链接器首先尝试链接库的共享版本(.so
),然后链接静态版本(.a
)。
您看到attempt to open ... failed
的警告不是真正的失败,而是关于链接器在搜索所需库中的进展的诊断消息。