我正在使用gcc编译器和ubuntu 12.04操作系统。我想知道在哪里可以找到目标文件以及在哪个目录下,其中包含printf函数的定义。我不是在寻找包含原型的头文件,而是包含实际定义的目标文件。
答案 0 :(得分:4)
您在寻找目标文件还是源文件?
.o对象文件存储在库libc.so
中。在大多数Linux发行版上,此文件位于/lib/libc.so
。在Ubuntu 11和12上,作为multiarch support的一部分,/ lib的内容已移至/lib/i386-linux-gnu
和/lib/x86_64-linux-gnu
。
您可以使用ar
(存档)命令获取单个目标文件,该命令用于使用x
(提取)选项创建库:
ar x libc.a stdio.o
但这似乎没有用,所以我猜你真的想要源文件而不是目标文件。为此,您将安装glibc package,其中包含printf.c(调用vprintf,调用vfprintf,其中包含printf的实际代码)。
此来源可以是browsed on Launchpad。它非常复杂,并且延伸超过2000行代码。
答案 1 :(得分:0)
我找到了我前两个问题的确切答案 -
要列出libc中存在的所有目标文件,我们使用以下命令:
x86_64系统:$ ar -t /usr/lib/x86_64-linux-gnu/libc.a
i386系统:$ ar -t /usr/lib/i386-linux-gnu/libc.a
要找出哪个目标文件包含printf函数,请在/ usr / lib / x86_64-linux-gnu / usr / lib / i386-linux-gnu或目录下运行此命令:
$ nm -o libc.a | grep -w printf
仍在努力寻找正确的答案。