【问题标题】:How does the linker knows which symbol to which one link?链接器如何知道哪个符号指向哪个链接?
【发布时间】:2011-03-17 09:23:12
【问题描述】:

假设我有两个 .cpp 文件,我在其中一个文件中写了

外部整数 i ;

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

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

我真的很困惑。

【问题讨论】:

  • 对象当然知道名称。好吧,符号和符号是根据名称确定地创建的,在简单的情况下是 1:1 映射。然而,这些符号可能不会成为最终的链接形式(即运行时形式)。尽管如此,对于共享库和 RTTI,仍然保留了很多符号信息。

标签: c++ linker loader


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    一些简单的阅读:Beginner's Guide to Linkers.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 2015-01-07
      • 1970-01-01
      • 2016-03-17
      • 1970-01-01
      相关资源
      最近更新 更多