2011-08-26 41 views
2

我對linux上RTLD_DEEP_BIND的理解是,如果在主程序中有一個函數A(),並且在動態鏈接庫(稱爲lib)中有兩個函數A()和B(),其中B被定義爲:Mac上的RTLD_FIRST在Linux上執行RTLD_DEEP_BIND的作業嗎?

B() 
{ 
    A(); 
} 

然後,對B()的調用總是最終從庫中調用A.這是RTLD_FIRST在Mac上執行的工作嗎?對不起 - 我很困惑的文檔。

回答

1

編號RTLD_FIRST只是一個標誌,影響dlsym如何用結果句柄調用時的行爲,而RTLD_DEEPBIND影響加載庫時符號的解析方式。它們的記錄都很差,但這是我在OSX和Linux的手冊頁上找到的信息。

2

RTLD_DEEPBIND似乎要做的是OS X上的默認設置。默認情況下,OS X使用稱爲雙層名稱空間的動態庫。 (您可以在鏈接時或加載時強制使用平面命名空間。)對於兩級命名空間,符號引用不僅記錄符號名稱,還記錄鏈接時解析該符號所用的庫。然後,在加載時,符號僅針對同一個庫進行解析。

相關問題