Я разрабатываю приложение, которое использует библиотеку GStreamer. Чтобы облегчить развертывание, я хотел бы собрать все библиотеки GStreamer в локальном комплекте. Для этого я написал небольшой скрипт, который делает следующее:Как развернуть приложение, зависящее от динамических библиотек?
- рекурсивно траверсы зависимостей (с использованием
otool -L
) - копирования всех зависимостей в локальный каталог
- сделать все пути зависимостей по отношению к @executable_path (с использованием
install_name_tool
)
(Если вы заинтересованы вы можете посмотреть на Ruby script.)
Тем не менее, я теперь видящие ошибки во время выполнения на gst_init
вызова:
(process:22843): GLib-GObject-CRITICAL **: gtype.c:2458: initialization assertion failed, use g_type_init() prior to this function
(process:22843): GLib-CRITICAL **: g_once_init_leave: assertion `initialization_value != 0' failed
Эти ошибки возникают только, если я использую локализованные библиотеки.
Существуют ли определенные «общие подводные камни», когда дело доходит до использования install_name_tool? Кто-нибудь есть идея, что я могу делать неправильно? Если вам нужно знать определенные детали, то не стесняйтесь спрашивать.
Update
Я изменил несколько вещей:
- Для зависимых библиотек я теперь только изменить пути dylib и не идентификатор (использовать только
install_name_tool -change
и неinstall_name_tool -id
). - Для основной библиотеки я устанавливаю значение id относительно исполняемого пути (
@executable_name/components/Video.dylib
).
Эти два изменения заставляют его работать. Однако мне пока не ясно, почему это работает. У меня есть некоторые проблемы с пониманием значения свойства id. Кажется, это идентификатор в виде пути. Почему изменение его для зависимых библиотек вызывает ошибки времени выполнения? Я попытаюсь найти ответы на эти вопросы с некоторыми дальнейшими экспериментами ...
Возможно, вы случайно повлияли на порядок загрузки для соответствующих зависимостей? –
@gf: Я так не думаю, но я буду иметь это в виду. Я сделал некоторый прогресс, проверьте редактирование, если вам интересно. – StackedCrooked
Разве вы не строите пакет .app? –