我试图手动完成我的程序的所有编译步骤.在我使用链接器命令ld的最后一步中,我需要指定库的目标文件(stdio,因为我在我的代码中使用了printf)然后我只能创建和.exe文件.该目标文件驻留在哪里?
我建议你跑gcc -v your_file.c.这将让您准确了解链接器正在使用的命令.您可能没有要链接的stdio.o文件.相反,它包含在C运行时库中,确切的文件将取决于您的系统配置.
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.o从libc.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)