默认链接的库

Tim*_*Tim 6 c linux gcc

我的代码在 test.c 中:

int main(){
return 0;
}
Run Code Online (Sandbox Code Playgroud)

从中编译的可执行文件所依赖的动态共享库是:

$ gcc -o test test.c
$ ldd test
    linux-gate.so.1 =>  (0x00783000)
    libc.so.6 => /lib/libc.so.6 (0x00935000)
    /lib/ld-linux.so.2 (0x00ea5000)
Run Code Online (Sandbox Code Playgroud)
  1. 我想知道这三个图书馆在扮演什么角色?
  2. 函数main属于哪个库?/lib/libc.so.6?
  3. return属于哪个图书馆?/lib/libc.so.6?
  4. 这三个库都是gcc默认动态链接的吗?
  5. 如何找出默认情况下 gcc 链接到的静态库?

谢谢!

Fre*_*Foo 3

  1. linux-gate.so并不是真正的共享库,而是内核的一部分,其作用类似于共享库,并使快速系统调用成为可能。ld-linux.so是一段可以加载其他共享库的代码。libc.so是 C 库,包含标准函数,如printfstrcpy
  2. main不属于任何图书馆。它属于您的程序,因为它的汇编版本完全存储在test二进制文件中。
  3. return不是一个函数,而是一个 C 语言结构。
  4. 不,它还链接到libgcc,这显然不是您系统上的共享库(或者它会显示)和一些启动代码。g++另外还会链接libstdc++.so(C++ 标准库)和libm.so(C 标准库的数学部分)。