【问题标题】:What makes a symbol be lazy or non-lazy one?是什么让符号变得懒惰或非懒惰?
【发布时间】:2017-03-07 00:51:01
【问题描述】:

我最近在学习一些关于 Mach-O 文件的知识。当我学习惰性符号和非惰性符号时会出现一个问题:谁确定一个符号是惰性的还是非惰性的?为什么?

我猜可能是编译器这样做...

更新: 我找到了关于我的问题的答案,也许这是事实:

延迟绑定由链接器的 -z 选项控制,ld。此选项将关键字作为参数;关键字包括(除其他外):

lazy 在生成可执行文件或共享库时,将其标记为告诉动态链接器将函数调用解析推迟到调用函数时(延迟绑定),而不是加载时。

now 在生成可执行文件或共享库时,将其标记为告诉动态链接器在程序启动时解析所有符号,或者在使用dlopen() 链接到共享库时,而不是将函数调用解析推迟到函数首先被调用。

惰性绑定是默认设置。如果您使用qcc(我们推荐),请使用-W 选项将-z 选项传递给ld。例如,指定-Wl,-zlazy-Wl,-znow

参考:Optimizing the runtime linker

相关问题:Does Clang/GCC really support a delay loading feature?

【问题讨论】:

    标签: objective-c mach-o


    【解决方案1】:

    听起来您已经了解了什么

    至于为什么部分:

    尽可能晚地做事:(a) 减少启动所需的工作,(b) 如果从不采用该执行路径,则完全避免该工作。这不仅适用于链接器,还适用于您可以延迟到需要时的任何执行。

    【讨论】:

      猜你喜欢
      • 2021-08-12
      • 2019-05-19
      • 2015-09-06
      • 2014-10-01
      • 2013-03-15
      • 2016-10-21
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多