2017-03-07 169 views
2

我正在最近学习关于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?

回答

2

听起来像是你有什么理解

对于为什么部分:

做的事情尽可能晚地:(1)减少发生启动的工作,和(b)完全避免了工作,如果是执行路径从来没有采取。这不仅适用于链接器,而且可以延迟执行,直到需要为止。