【发布时间】:2012-04-03 07:49:43
【问题描述】:
朋友们,我有两个文件, a.c 和 b.c 。 我在 a.c 中定义了一个函数 foo,它是从 b.c 调用的。
据我了解,当编译器尝试编译bc时,它会看到foo的实现不在b中,所以它会在符号表中添加一个foo的条目,os要在链接时间。我正确理解了这个概念。
现在,我在 b.c 中有一个不同的函数 printf,它在 glibc 中实现。据我了解, printf 可以在加载时或运行时链接。如果 printf 将在运行时链接,则每次调用 printf 都必须有一个存根,它将在运行时使用系统调用解决。
我的问题是“我的理解正确吗???+编译器如何确定函数 foo 将由链接器解析而不是在运行时解析???”
我注意到一些类似的问题,但在这里无法理解它们的意义???
【问题讨论】:
标签: gcc compiler-construction linker runtime