我正在使用 gcc 编译器和 ubuntu 12.04 操作系统。我想知道在哪里可以找到目标文件以及在哪个目录下,其中包含 printf 函数的定义。同样,我不是在寻找包含原型的头文件,而是在寻找包含实际定义的目标文件。
2 回答
您是在寻找目标文件还是源文件?
.o 目标文件存储在库中,libc.so
. 在大多数 Linux 发行版上,此文件位于/lib/libc.so
. 在 Ubuntu 11 和 12 上,作为multiarch support的一部分,/lib 的内容已移至/lib/i386-linux-gnu
和/lib/x86_64-linux-gnu
。
您可以使用ar
(archive) 命令获取单个目标文件,该命令用于使用x
(extract) 选项创建库:
ar x libc.a stdio.o
不过,这似乎不是很有用,所以我猜您实际上想要的是源文件而不是目标文件。为此,您将安装glibc 包,其中包含 printf.c(它调用 vprintf,它调用 vfprintf,其中包含 printf 的实际代码)。
可以在 Launchpad 上浏览此源。它非常复杂,代码超过 2000 行。
我找到了我前两个问题的确切答案-
要列出 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
仍在努力寻找正确的答案。