当我使用clang/gcc编译
.c
文件时,我不需要显式地链接libc库。但它仍然像libc一样工作,并自动链接了两个附加库。为什么gcc/clang知道自动链接?这种行为在哪里提到?$ cat main.c
/* vim: set noexpandtab tabstop=2: */
#include <stdio.h>
int main() {
puts("Hello World!");
return 0;
}
$ clang -o main.exe main.c # or gcc
$ ./main.exe
Hello World!
$ nm -D /lib/x86_64-linux-gnu/libc-2.27.so | grep -w puts
00000000000809c0 W puts
$ ldd main.exe
linux-vdso.so.1 (0x00007ffe743ba000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f397ce7b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f397d26c000)
libc
[和libgcc.a
]是“选择退出”的。也就是说,除非您通过(例如)-nostdlib
选项明确表示不想要它,否则将自动获取它。有关gcc
手册中的-nodefaultlibs
和-nostartfiles
,请参见。 - Craig Estey