5

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

4

2 回答 2

4

您是在寻找目标文件还是源文件?

.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 行。

于 2012-07-25T16:35:09.697 回答
1

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

  1. 要列出 libc 中存在的所有目标文件,我们使用以下命令:

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

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

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

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

  3. 仍在努力寻找正确的答案。

于 2012-07-26T12:43:58.330 回答