最近在学习一些关于Mach-O文件的知识。当我学习惰性符号和非惰性符号时,有一个问题:谁决定符号是惰性符号还是非惰性符号?为什么?
我想这可能是编译器这样做的......
更新:我找到了关于我的问题的答案,也许这是事实:
延迟绑定由链接器的 -z 选项控制ld。该选项将关键字作为参数;关键词包括(除其他外):
lazy
生成可执行文件或共享库时,对其进行标记以告诉动态链接器将函数调用解析推迟到调用函数时(延迟绑定),而不是加载时。
now
生成可执行文件或共享库时,对其进行标记以告诉动态链接器在程序启动时或共享库链接到 using 时解析所有符号dlopen(),而不是将函数调用解析推迟到函数第一次出现时叫。
延迟绑定是默认设置。如果您正在使用qcc(按照我们的建议),请使用 -W 选项将 -z 选项传递给 ld。例如,指定-Wl、-zlazy或-Wl、-znow。
参考:优化运行时链接器