我最近学习了一些关于Mach-O文件的知识。当我学习懒惰符号时会出现一个问题。非懒惰的符号:谁确定一个懒惰或非懒惰的符号?为什么?
我想这可能是编译器那样做的......
更新: 我找到了关于我的问题的答案,也许这是事实:
延迟绑定由链接器ld
的-z选项控制。此选项将关键字作为参数;关键字包括(其中包括):
lazy
生成可执行文件或共享库时,将其标记为告诉动态链接器将函数调用解析推迟到调用函数时的时间点(延迟绑定),而不是在加载时。
now
生成可执行文件或共享库时,将其标记为告诉动态链接器在程序启动时解析所有符号,或者在使用dlopen()
链接共享库时,而不是将函数调用解析推迟到该点首次调用该函数时。
延迟绑定是默认设置。如果您正在使用qcc
(我们建议),请使用-W选项将-z选项传递给ld。例如,指定-Wl
,-zlazy
或-Wl
,-znow
。
答案 0 :(得分:2)
听起来你已经明白 了。
至于为什么部分:
尽可能晚地做事:(a)减少启动工作,以及(b)如果从未采取执行路径,则完全避免这项工作。这不仅适用于链接器,也适用于您需要延迟直到需要的任何执行。