Gcc 在哪里可以找到包含printf函数定义的对象文件?
我正在使用gcc编译器和Ubuntu12.04操作系统。我想知道在哪里可以找到目标文件,在哪个目录下,包含printf函数的定义。同样,我不是在寻找包含原型的头文件,而是寻找包含实际定义的对象文件 您是在查找目标文件还是源文件 .o对象文件存储在库中,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 您可以通
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的一部分。你到底在找什么?如中所示,您是在源代码中查找定义,还是在您的计算机上查找包含该定义的库?我正在查找包含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