Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux上的gcc如何知道包含printf函数的是libc.so.6?_C_Linux_Gcc_Compilation_Linker - Fatal编程技术网

Linux上的gcc如何知道包含printf函数的是libc.so.6?

Linux上的gcc如何知道包含printf函数的是libc.so.6?,c,linux,gcc,compilation,linker,C,Linux,Gcc,Compilation,Linker,如果我做了gcc hello_world.c,gcc/ld怎么知道应该链接的是libc.so.6?gcc/ld是否通过默认的共享库路径(但是链接器已配置,加上一些gcc附加样式),然后扫描每个文件的符号表?它没有。除非使用-nostlib,-lc在默认库中,GCC将传递给链接器以执行链接命令。对于其他库,您需要在链接时明确请求它们。这并不能回答问题-lc不是库。它是一个命令行开关。它告诉链接器查找名为libc.something的文件。除非被环境变量或开关修改,否则它查找它的路径和某物的可能值要

如果我做了
gcc hello_world.c
gcc
/
ld
怎么知道应该链接的是
libc.so.6
gcc
/
ld
是否通过默认的共享库路径(但是链接器已配置,加上一些
gcc
附加样式),然后扫描每个
文件的符号表?

它没有。除非使用
-nostlib
-lc
在默认库中,GCC将传递给链接器以执行链接命令。对于其他库,您需要在链接时明确请求它们。

这并不能回答问题<代码>-lc
不是库。它是一个命令行开关。它告诉链接器查找名为
libc.something的文件。除非被环境变量或开关修改,否则它查找它的路径和
某物的可能值要么内置在链接器中,要么在构建链接器时进行配置。@EricPostpischil:正式地说,
-lc
就是库。是否存在这样的文件由实现定义。对于gcc来说,是的,但无论如何,我认为这是一种合理的方式来谈论这种情况。在
-lc
中,“c”是库的名称(第211页)。但这不是图书馆;那里有一句话说“链接器搜索库的标准目录列表”,所以库实际上是某个目录中的一个文件。此外,这个问题询问
gcc
ld
如何知道应该链接到的是
libc.so.6
。默认情况下,
gcc
,当链接它知道从C源派生的对象时,会将
-lc
或一些等效的对象传递给链接器。链接器有它搜索的标准系统目录和扩展的列表,……这些列表取决于目标平台和构建GNU工具时使用的设置。我会回答这个问题,除非我不知道
.so.6
.6
部分。我希望链接器搜索
.so
文件,但我不知道它的搜索是否会直接包括
.so.6
文件,或者链接器会以某种方式找到它,因为它是在其他文件中引用的。(例如,一个
libc.so
存根,它指的是
libc.so.6
)。