2014-02-19 30 views
1

似乎在OS X共享庫的絕對路徑引用:在Linux上在OS X上使用相對路徑或庫名引用共享庫?

$ otool -L /bin/ls 
/bin/ls: 
    /usr/lib/libutil.dylib (compatibility version 1.0.0, current version 1.0.0) 
    /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1) 

雖然,圖書館大多是他們的名字引用。我可以改變這種行爲嗎?

謝謝!

編輯:我檢查了FreeBSD,它的運行方式與Linux相同。我不知道這是否只是鏈接器的問題,但是在OS X上使用gcc(不是鏗鏘聲)後,它沒有改變任何東西。

+0

這是什麼運氣?我現在正面臨類似的問題。 – IneQuation

+0

@IneQuation不,還是沒有運氣。 – xuhdev

回答

1

您可以使用install_name_tool修復這些路徑。最好在共享庫上使用-id選項執行此操作,但也可以使用-change修復可執行文件。詳情請諮詢man install_name_tool

我將共享庫上的安裝名更改爲@loader_path/libfoo.1.2.3.dylib,並使用可執行文件重新分發libfoo.1.2.3.dylib。如果你在網上搜索rpath executable_path loader_path,你會發現那些@paths是什麼文件。