【问题标题】:How does linker know which symbols should be resolved at runtime?链接器如何知道应该在运行时解析哪些符号?
【发布时间】:2011-04-21 07:11:30
【问题描述】:

链接器如何知道在运行时应该解析哪些符号?特别是我对共享对象文件携带哪些信息感兴趣,这些信息指示链接器在运行时解析符号。动态符号解析在运行时如何工作,即可执行文件将如何查找符号以及在定义了多个同名符号的情况下会找到哪些符号?

如果文件只是静态链接,然后在运行时作为共享库的一部分动态链接,会发生什么情况?可执行文件将使用哪个符号?换句话说,是否可以通过将可执行文件中的符号链接到共享库来覆盖这些符号?

有问题的平台是 SUN OS。

【问题讨论】:

  • 每个运行时都是不同的。您必须更具体地了解平台。

标签: c++ shared-libraries shared-objects


【解决方案1】:

试试下面的链接。希望能回答你的问题

http://www.linuxjournal.com/article/6463

【讨论】:

  • :O) 打败我。我在回答中引用了同一篇文章。为速度投票。
  • 我其实就是拿这篇文章来作为C++编程入门的人的例子,非常有效。
  • 如果文件被静态链接,但在运行时作为共享库的一部分动态链接,会发生什么情况?可执行文件将使用哪个符号?换句话说,是否可以通过将可执行文件中的符号链接到共享库来覆盖这些符号?
  • 该库仅用于解析程序所有目标文件中尚未解析的符号。所以,我相信静态链接会覆盖。
【解决方案2】:

查看来自Linux Journal 的这篇文章。有关更多信息(可能与 Windows、AIX、OSx 等特别相关),我会推荐 Linker (computing) 上的 Wikipedia 文章以及其中的参考资料。

【讨论】:

    【解决方案3】:

    如果文件是静态链接的,则没有运行时分辨率可言。如果共享对象以动态或静态方式链接到同一个库,则链接到该库的版本只会影响在该库中执行的代码。如果您链接到同一个库的两个不同版本的不兼容并来回移动数据,这可能会导致问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 2017-06-14
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多