Установка путей dylib в качестве шага сборки XCode - PullRequest
1 голос
/ 31 августа 2010

У меня есть приложение Какао в качестве проекта XCode, которое имеет несколько дополнительных битов функциональности в качестве целей dylib.

Когда XCode собирает проект, он помещает все выходные данные сборки в одну папку: пакет .app и файлы dylib. А при запуске из отладчика XCode запускается .app.

Однако я не могу запустить приложение из Finder.

Как настроить XCode для «развертывания» приложения в автономном состоянии? Я обнаружил, что могу использовать ld в реальном двоичном файле приложения для указания относительного пути к dylibs: @executable_path/../../mylib.dylib

Запуск сценария после каждой сборки кажется неправильным: должен быть какой-то способ (который я полностью отсутствует) сделать это легко изнутри XCode - это должно быть распространенной проблемой, конечно?


Похоже, что XCode поддерживает использование @executable_path, @loader_path и @rpath, используемых в настройке Target Info> Build> Linking> Dynamic Library Install Name (LD_DYLIB_INSTALL_NAME).

Текст справки гласит: «Устанавливает внутренний« путь установки »(LC_ID_DYLIB) в динамической библиотеке. Любые клиенты, связанные с библиотекой, будут записывать этот путь как способ, которым dyld должен найти эту библиотеку» *

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


Запустив свой testapp из поиска, я получаю следующий (соответствующий) текст ошибки

Dyld Error Message:
  Library not loaded: @executable_path/../../util.dylib
  Referenced from: /Volumes/data/Code/TestApp/build/Debug/TestApp.app/Contents/MacOS/TestApp
  Reason: image not found

util.dylib находится в / Volumes / data / Code / TestApp / build / Debug /, поэтому я запутался: /

1 Ответ

2 голосов
/ 01 сентября 2010

Вы должны использовать фазу сборки Copy Files для копирования dylib в комплект приложения при сборке приложения.Вы захотите скопировать его в Frameworks.Затем вы можете установить путь установки на @executable_path/../Frameworks/mylib.dylib.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...