是否将所有目标文件符号都添加到输出中?

时间:2018-08-02 11:26:50

标签: build linker

我有一个嵌入式应用程序。在资源(包括代码存储区)方面,运行程序的平台非常有限。

所以我有一个庞大的开源库( .c .h 文件),它与我的应用程序(用户)文件一起构建。

假设我在main.c中有一个简单的程序,它从不调用任何库函数。示例:

#include "main.h"

volatile int a;

int main()
{
  while(1)
  {
    if(a)
    {
      a=0;
    }
  }
 return 0;
}

在上面的示例中,假设 main.h 包含所有库头文件。 .textROM节的大小(在我看来)应该很小,因为该程序不需要(在当前开发状态​​下)任何库函数(假设我包括它们以进行过早的设计。

代码存储器的大小是否会和包含所有已编译符号的大小一样大?或者(某种程度上),链接器足够聪明,可以知道未引用的符号在输出中没有位置?

如果是,那么确定要在输出中放置(从目标文件池中)什么符号的机制是什么?

1 个答案:

答案 0 :(得分:0)

我想添加我的问题的答案,因为到目前为止,还没有人只是评论类型,因为这是链接程序的工作方式(不提供任何信息)。因此,经过大量搜索,我遇到了this这样的问题。 它解释了链接器决策算法背后的机制。 即留下的东西和消失的东西:)。