stdio.o住在linux机器里的哪里?

JIN*_*007 0 c linux

我试图手动完成我的程序的所有编译步骤.在我使用链接器命令ld的最后一步中,我需要指定库的目标文件(stdio,因为我在我的代码中使用了printf)然后我只能创建和.exe文件.该目标文件驻留在哪里?

Gab*_*ern 6

我建议你跑gcc -v your_file.c.这将让您准确了解链接器正在使用的命令.您可能没有要链接的stdio.o文件.相反,它包含在C运行时库中,确切的文件将取决于您的系统配置.


Lie*_*yan 5

stdio是C标准库的一部分.标准库的确切位置是特定于系统的,但它通常位于名为libc.a或libc.so的文件中.

在我的机器中,这可以在以下位置找到:

/usr/lib/x86_64-linux-gnu/libc.a
/usr/lib/x86_64-linux-gnu/libc.so
Run Code Online (Sandbox Code Playgroud)

您可以要求ld搜索目录:ld --verbose | grep SEARCH_DIR.

libc.a是一个ar(man)存档,您可以使用以下命令stdio.olibc.a存档中提取ar:

$ # list archive member with `ar t`
$ ar t /usr/lib/x86_64-linux-gnu/libc.a | grep ^stdio
stdio.o
$ # extract stdio.o with `ar x`
$ ar x /usr/lib/x86_64-linux-gnu/libc.a stdio.o
Run Code Online (Sandbox Code Playgroud)