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

  • 我用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
    

    最佳答案

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

    您看到attempt to open ... failed的警告不是真正的失败,而是有关链接程序搜索所需库的进度的诊断消息。

    10-06 08:04