Rya*_*Yan 5 mach-o objective-c
最近在学习一些关于Mach-O文件的知识。当我学习惰性符号和非惰性符号时,有一个问题:谁决定符号是惰性符号还是非惰性符号?为什么?
我想这可能是编译器这样做的......
更新:我找到了关于我的问题的答案,也许这是事实:
延迟绑定由链接器的 -z 选项控制ld。该选项将关键字作为参数;关键词包括(除其他外):
lazy
生成可执行文件或共享库时,对其进行标记以告诉动态链接器将函数调用解析推迟到调用函数时(延迟绑定),而不是加载时。
now
生成可执行文件或共享库时,对其进行标记以告诉动态链接器在程序启动时或共享库链接到 using 时解析所有符号dlopen(),而不是将函数调用解析推迟到函数第一次出现时叫。
延迟绑定是默认设置。如果您正在使用qcc(按照我们的建议),请使用 -W 选项将 -z 选项传递给 ld。例如,指定-Wl、-zlazy或-Wl、-znow。
参考:优化运行时链接器
听起来你已经明白了什么。
至于为什么部分:
尽可能晚地执行操作:(a) 减少启动所需的工作,(b) 如果从未采用该执行路径,则完全避免该工作。这不仅适用于链接器,也适用于您可以延迟到需要时的任何执行。
| 归档时间: |
|
| 查看次数: |
1619 次 |
| 最近记录: |