我有以下程序:
# include <stdio.h>
int main(int argc, char *argv[]) {
printf("Hello World!\n");
return 0;
}
我编译它(动态链接)并ldd
在a.out
. 我看见:
linux-vdso.so.1
libc.so.6
ld-linux-x86-64.so.2
- 第一个是内核提供的虚拟共享对象。
- 第二个是C标准库。
- 第三个是动态链接器。
我不确定第一个和第三个如何受到静态链接的影响,我想知道是否使用了整个标准库,即使我只包含一个标头。
如果我静态链接这个程序,生成的二进制文件会
- 包含
linux-vdso.so.1
,即使它是由内核提供的? - 包含整个 C 标准库,即使我只包含
<stdio.h>
? - 包含
ld-linux-x86-64.so.2
,即使它用于运行动态链接的程序?