【发布时间】:2014-12-08 06:02:17
【问题描述】:
我正在尝试手动执行程序的所有编译步骤。在我使用链接器命令 ld 的最后一步中,我需要为库指定目标文件(stdio,因为我在代码中使用了 printf)然后只有我可以制作和 .exe 文件。这个目标文件在哪里?
【问题讨论】:
我正在尝试手动执行程序的所有编译步骤。在我使用链接器命令 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
您可以向ld询问搜索目录:ld --verbose | grep SEARCH_DIR。
libc.a 是一个ar (man) 存档,您可以使用ar 命令从libc.a 存档中提取stdio.o:
$ # 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
【讨论】:
它可能在根目录下
类似/usr/lib 或/usr/lib***
【讨论】:
/usr