簡體   English   中英

為什么gcc / clang默認知道鏈接到libc?

[英]Why does gcc/clang know to link to libc by default?

當我運行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)

為什么gcc / clang知道自動鏈接?

為了方便起見,GCC開發人員將此內置到GCC中。 缺省情況下,鏈接哪些庫受編譯語言的部分影響,該語言是從文件名推導出的,並且可以使用-x開關進行控制。

在哪里提到這種行為?

GCC文檔中的此頁面提到默認情況下有一些鏈接的庫,並說您可以使用-nostdlib和其他開關禁用或修改此行為,但是我看不到默認情況下鏈接的庫的明確列表。 它可能因系統/平台以及語言而異。 您可以使用-v開關要求GCC向您顯示其正在執行的命令,而鏈接命令(使用ld )應顯示庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM