【发布时间】:2017-03-07 00:51:01
【问题描述】:
我最近在学习一些关于 Mach-O 文件的知识。当我学习惰性符号和非惰性符号时会出现一个问题:谁确定一个符号是惰性的还是非惰性的?为什么?
我猜可能是编译器这样做...
更新: 我找到了关于我的问题的答案,也许这是事实:
延迟绑定由链接器的 -z 选项控制,ld。此选项将关键字作为参数;关键字包括(除其他外):
lazy
在生成可执行文件或共享库时,将其标记为告诉动态链接器将函数调用解析推迟到调用函数时(延迟绑定),而不是加载时。
now
在生成可执行文件或共享库时,将其标记为告诉动态链接器在程序启动时解析所有符号,或者在使用dlopen() 链接到共享库时,而不是将函数调用解析推迟到函数首先被调用。
惰性绑定是默认设置。如果您使用qcc(我们推荐),请使用-W 选项将-z 选项传递给ld。例如,指定-Wl,-zlazy 或-Wl,-znow。
【问题讨论】:
标签: objective-c mach-o