2015-11-24 8 views
1

У меня есть внешняя библиотека libspecial.dylib lib со следующими зависимостями.Невозможно изменить @rpath на osx

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 

Но это заменяет только вторую зависимость (на самом деле есть несколько зависимостей, все заменены, но не первый, который указывает на самого ОМТ):

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/в начале. Все дилибы, которые я видел, начинаются со своего имени. Можете ли вы установить его на 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