2015-11-24 45 views
1

我有一個外部lib'libspecial.dylib',它具有以下依賴項。無法更改osx上的@rpath

otool -L libspecial.dylib                               [11:20:59] 
libspecial.dylib: 
    @rpath/libspecial.dylib (compatibility version 1.0.0, current version 1.0.1) 
    @rpath/libhelper.dylib (compatibility version 1.0.0, current version 1.0.1) 

因爲@rpath導致問題我有一個腳本將所有@rpath替換爲真實路徑。

install_name_tool -change @rpath/libspecial.dylib /tmp/libspecial.dylib libspecial.dylib 
install_name_tool -change @rpath/libhelper.dylib /tmp/libhelper.dylib libspecial.dylib 

但這只是取代了第二依賴(其實有更多的依賴關係,所有被替換,但沒有指向的lib本身第一個):

otool -L libspecial.dylib 
libspecial.dylib: 
    @rpath/libspecial.dylib (compatibility version 1.0.0, current version 1.0.1) 
    /tmp/libhelper.dylib (compatibility version 1.0.0, current version 1.0.1) 

我不知道爲什麼我無法改變第一個依賴關係。有任何想法嗎?

運行在OSX 10.11.1

+0

第一個引用是庫本身的引用,所以我不希望你可以改變這一點。但是,我不希望它在一開始就有@ rpath /。我見過的所有dylib都是以自己的名字開始的。你可以將它設置爲libspecial.dylib? – TheDarkKnight

+0

你是對的,在這個庫的最後一個版本中,對自身的引用沒有@rpath,並且一切正常。但遺憾的是,我無法改變它,而不是/tmp/libspecial.dylib而不是libspecial.dylib。 – Marcel

+0

當二進制文件與它鏈接時,不會影響默認加載路徑嗎?我不認爲它在運行時很重要。 – trojanfoe

回答

1

好吧,我認識到,第一個「依賴」是不是依賴正因爲如此,它更的lib的名稱。我也可以在使用時看到它

otool -D libspecial.dylib 
    @rpath/libspecial.dylib 

所以命令是錯的。它可以固定與

install_name_tool -id libspecial.dylib libspecial.dylib