链接器如何知道哪个符号链接到哪个?

时间:2011-03-17 09:23:13

标签: c++ linker loader

说我有两个.cpp文件,其中一个是我写的

extern int i;

在另一个中我定义了i变量。

现在链接器如何知道在第一个文件中i应该链接到第二个文件中的“i”地址?出现这个问题,因为据我所知,目标文件没有关于变量名的任何信息(它只知道地址)(见this link)。

我真的很困惑。

2 个答案:

答案 0 :(得分:2)

目标代码中包含符号定义。链接器使用这些来解析对符号的引用。这些符号不是可执行代码的一部分,并且不能被目标文件中包含的代码读取(因此要链接到的问题的答案)。

链接的可执行文件中也可能包含符号(例如,供调试器使用),或者可能在链接阶段(或更高版本)删除符号,因为它们对可执行文件中包含的代码没用。

答案 1 :(得分:2)

一些轻读:Beginner's Guide to Linkers