【发布时间】:2016-05-11 05:37:25
【问题描述】:
我已经有一段时间没有接触 c++了,这个问题可能很愚蠢,但它确实困扰了我一段时间。
假设我有以下 c 程序:
#include <stdio.h>
int main()
{
int i;
for(i=0; i<10; i++)
{
printf("Hello World!\n");
}
return 0;
}
我知道我包含stdio.h 的原因是因为我在main 中调用printf,但我想知道编译器如何知道在编译期间在哪里可以找到printf() 的实现? stdio.h 只提供函数原型,但编译过程中到底发生了什么?
是否存在编译器知道的某些前缀路径来搜索printf 的实现?如果有,如何找到它们?
非常感谢!
【问题讨论】:
-
真正找到它的是链接器。是的,查找标准库的路径是预定义的。
-
@πάνταῥεῖ 你能再解释一下吗?谢谢!
-
"链接阶段的路径查找" 对于不同的编译器,或者对于同一个编译器的不同版本是不同的。你为什么对它感兴趣?
-
如果您想真正了解编译器/链接器正在寻找头文件和库(至少对于 gcc)的幕后情况,请参阅 stackoverflow.com/a/11481258/12711。