Почему gcc / clang знает, как связываться с libc по умолчанию? - PullRequest
0 голосов
/ 28 января 2019

Когда я запускаю 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)

1 Ответ

0 голосов
/ 28 января 2019

Почему gcc / clang знает, что связываются автоматически?

Разработчики GCC встроили это в GCC для удобства.Какие библиотеки связаны по умолчанию, частично зависит от языка компилируемого, который выводится из имен файлов и может управляться переключателем -x.

Где упоминается это поведение?

На этой странице документации GCC упоминается, что некоторые библиотеки связаны по умолчанию, и говорится, что вы можете отключить или изменить это поведение с помощью -nostdlib и других переключателей, но я не вижуявный список библиотек, которые связаны по умолчанию.Это может варьироваться в зависимости от системы / платформы, а также от языка.Вы можете использовать переключатель -v, чтобы попросить GCC показать вам команды, которые он выполняет, а команда link (использующая ld) должна показать библиотеки.

...