gpt4 book ai didi

c - 为什么 gcc/clang 默认知道链接到 libc?

转载 作者:太空宇宙 更新时间:2023-11-04 02:23:28 25 4
gpt4 key购买 nike

当我运行 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)

最佳答案

Why does gcc/clang know to link automatically?

GCC 开发人员为方便起见将其内置到 GCC 中。默认情况下链接哪些库部分受编译语言的影响,这是从文件名推导出来的,可以用 -x 开关控制。

Where is this behavior mentioned?

This page in the GCC documentation提到有一些默认链接的库,并说您可以使用 -nostdlib 和其他开关禁用或修改此行为,但我没有看到默认链接的库的明确列表。它可能因系统/平台以及语言而异。您可以使用 -v 开关让 GCC 向您显示它正在执行的命令,链接命令(使用 ld)应该显示库。

关于c - 为什么 gcc/clang 默认知道链接到 libc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54395692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com