Подтвердить что ты не робот

Не могли бы вы помочь мне понять, как работают библиотеки Mach-O в Mac Os X?

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

Я прочитал страницы руководства для install_name_tool, но я не понимаю, ПОЧЕМУ я должен это делать. Может кто-то, пожалуйста, так любезно объяснить, как работают библиотеки? особенно часть, в которой приложение и библиотеки имеют пути, указывающие на определенные места на моей машине, например /usr/local/lib/mylibrary.dylib при запуске otool -L

4b9b3361

Ответ 1

Apple имеет несколько способов поиска разделяемых библиотек:

  • @executable_path: относительно основного исполняемого файла
  • @loader_path: относительно ссылочного двоичного файла
  • @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.

Ответ 2

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