Когда я запускаю 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
. См. Также-nodefaultlibs
и-nostartfiles
на странице руководства дляgcc
- person Craig Estey   schedule 28.01.2019