2017-02-13 64 views
2

我正在開發一個在Xcode之外開發的macOS dylib框架,我試圖瞭解install_name選項的意義。macOS Mach-O dylib LC_ID_DYLIB名稱或install_name的意義是什麼?

例如,我可以將LC_ID_DYLIB部分的name設置爲更類似於使用install_name這樣的參數在應用程序包框架中找到的內容。

clang++ ... -install_name @executable_path/../Frameworks/somelib.framework/Versions/somelib ... 

然後用otool -l我可以看到我的名字已經在二進制,從默認(默認情況下的-o選項匹配)不同的設置。

otool -l somelib 
... 
      cmd LC_ID_DYLIB 
     cmdsize 96 
     name @executable_path/../Frameworks/somelib.framework/Versions/A/somelib (offset 24) 
    time stamp 1 Wed Dec 31 19:00:01 1969 
     current version 1.0.0 
compatibility version 1.0.0 
.... 

所以我知道如何設置它,但我不明白的是,究竟該值用於知道它應該是什麼,我也可以找到關於它的任何文件。

我可以看到爲什麼LC_LOAD_DYLIB部分需要關於在哪裏查找二進制文件的信息(因爲這些部分引用了其他二進制文件),但爲什麼dylib需要關於在哪裏找到它的信息?鏈接到它的二進制文件應該是找到它的二進制文件?

那麼macOS dylib究竟做了什麼呢?LC_ID_DYLIBinstall_name做什麼?

回答

4

任何鏈接到dylib的客戶端都會將加載命令LC_ID_DYLIB中指定的路徑記錄爲在運行時查找dylib的路徑。這是非常有用的,因爲dylib在構建時所處的路徑往往不在運行時找到的地方。

+0

我想我明白你的意思了。是否有道理說:「這是將被複制到鏈接到它的二進制文件的路徑」? –

+0

是的,這是準確的。 – bdash

相關問題