Почему install_name_tool и otool необходимы для библиотек Mach-O в Mac Os X? - PullRequest
35 голосов
/ 13 февраля 2012

Я разрабатываю приложение Какао с использованием последней версии Xcode 4, я хочу связать динамические библиотеки с моим проектом (dylibs).

Я где-то читал, что добавления библиотек в моем проекте недостаточно, так как мне нужно запустить install_name_tool и otool, чтобы мой проект использовал библиотеки, которые были включены в мой проект.

Я прочитал справочные страницы для install_name_tool, но не понимаю, ПОЧЕМУ я должен это сделать.

Как работают библиотеки? Особенно интересует часть, где у приложения и библиотек есть пути, которые указывают на определенные места на моем компьютере, например /usr/local/lib/mylibrary.dylib при запуске otool -L

Ответы [ 2 ]

58 голосов
/ 13 февраля 2012

У Apple есть несколько способов поиска общих библиотек:

  1. @executable_path: относительно основного исполняемого файла
  2. @loader_path: относительно ссылающегося двоичного файла
  3. @rpath: относительно любого из списка путей.

@rpath является самым последним дополнением, представленным в OS X 10.5.

Если, например, вы хотите иметь свой исполняемый файл в Contents/MacOS и библиотеки в Contents/Libraries, вы можете сделать следующее:

install_name_tool -id @rpath/Libraries/lib_this.dylib   builddir/lib_this.dylib

и в исполняемом наборе верхнего уровня rpath с:

install_name_tool -add_rpath @loader_path/..  myexecutable

и

install_name_tool -change builddir/lib_this.dylib @rpath/Libraries/lib_this.dylib myexecutable

Примечание: первый путь после -change должен точно соответствовать тому, что в данный момент находится в двоичном файле.

Если вы потерялись, otool -l -v myexecutable сообщит вам, какие именно команды загрузки в данный момент находятся в исполняемом файле.

См. man dyld и man install_name_tool для получения дополнительной информации.

8 голосов
/ 25 июля 2015

Существует также инструмент с графическим интерфейсом MacDependency, который будет отображать все зависимые библиотеки (https://github.com/kwin/macdependency/).

...