Gcc 在哪里可以找到包含printf函数定义的对象文件?

Gcc 在哪里可以找到包含printf函数定义的对象文件?,gcc,printf,object-files,Gcc,Printf,Object Files,我正在使用gcc编译器和Ubuntu12.04操作系统。我想知道在哪里可以找到目标文件,在哪个目录下,包含printf函数的定义。同样,我不是在寻找包含原型的头文件,而是寻找包含实际定义的对象文件 您是在查找目标文件还是源文件 .o对象文件存储在库中,libc.so。在大多数Linux发行版上,此文件位于/lib/libc.so。在Ubuntu11和Ubuntu12上,作为的一部分,/lib的内容被移动到/lib/i386 linux gnu和/lib/x86_64-linux-gnu 您可以通

我正在使用gcc编译器和Ubuntu12.04操作系统。我想知道在哪里可以找到目标文件,在哪个目录下,包含printf函数的定义。同样,我不是在寻找包含原型的头文件,而是寻找包含实际定义的对象文件

您是在查找目标文件还是源文件

.o对象文件存储在库中,
libc.so
。在大多数Linux发行版上,此文件位于
/lib/libc.so
。在Ubuntu11和Ubuntu12上,作为的一部分,/lib的内容被移动到
/lib/i386 linux gnu
/lib/x86_64-linux-gnu

您可以通过使用
ar
(存档)命令获取单个对象文件,该命令用于使用
x
(提取)选项创建库:

不过,这似乎不是很有用,所以我猜您实际上想要的是源文件而不是目标文件。为此,您需要安装,其中包含printf.c(它调用vprintf,它调用vfprintf,它包含printf的实际代码)


这个来源可以是。它相当复杂,并且延伸了2000多行代码。

我找到了我的前两个问题的确切答案-

  • 要列出libc中存在的所有对象文件,我们使用以下命令:

    x86_64系统:$ar-t/usr/lib/x86_64-linux-gnu/libc.a

    i386系统:$ar-t/usr/lib/i386linux-gnu/libc.a

  • 要找出哪个对象文件包含printf函数,请在/usr/lib/x86_64-linux-gnu/usr/lib/i386 linux gnu或目录下运行此命令:

    $nm-o libc.a | grep-w printf

  • 仍在努力寻找正确答案


  • 它是libc的一部分。你到底在找什么?如中所示,您是在源代码中查找定义,还是在您的计算机上查找包含该定义的库?我正在查找包含printf代码定义的libc下的目标文件。我对此有3个具体问题,即(1)使用ar命令,列出libc 2中存在的所有目标文件。在这些对象文件中,包含printf()定义的文件是什么?你是用什么命令来发现的?3.是否可以通过只包含程序中实际需要/使用的那些定义来减小最终可执行文件的大小?如果是的话,怎么办。这是家庭作业吗?(1) man ar,(2)
    objdump+一些选项| grep printf
    (3)请参阅GCC文档并试用。是的,
    nm
    是处理库时
    objdump
    的一个很好的替代方案。
    ar x libc.a stdio.o