使用ld

时间:2017-12-29 20:33:13

标签: c gcc linker

假设我有a.cb.c来源。 b.c中的代码调用a.c,但a.c从不直接调用b.c中的任何函数。文件a.c包含main函数。

我编译了它们,并获得了两个目标文件:a.ob.o。我只能链接a.o并获取可执行文件,生成map file。此linker map包含a.c中所有函数的绝对地址。

现在我想要链接b.o。我可以给链接器a.ob.o,它会完美地工作。但由于a没有调用b,因此链接b.o实际上并不需要a的内容,只有a内的每个函数的最终地址{ {1}}。因此,应该可以仅链接b.o,仅链接map file时生成的a.o

但是,我没有找到任何适当的标志告诉ld它应该从地图文件中获取a的符号地址。 如何告诉ld这样做?

我发现在网上向使用地图文件的人提及,但从未解释如何使用ld实现。例如,一篇研究论文:

  

编译Contiki系统核心时,编译器生成一个映射文件,其中包含系统核心中所有全局可见函数和变量之间的映射及其地址。此地址列表用于预先链接Contiki模块。

0 个答案:

没有答案