2017-03-07 166 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)完全避免了工作,如果是執行路徑從來沒有采取。這不僅適用於鏈接器,而且可以延遲執行,直到需要爲止。