Я разрабатываю приложение, которое пользуется библиотекой GStreamer. Для упрощения развертывания, я хотел бы собрать все библиотеки GStreamer в локальном пакете. Для этого я записал немного сценария, который делает следующее:
otool -L
)install_name_tool
)(Если Вам интересно, можно взглянуть на сценарий Ruby.)
Однако я теперь вижу ошибки периода выполнения на 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? У кого-либо есть идея, что я мог делать неправильно? Если необходимо знать, что определенные детали тогда не стесняются спрашивать.
Обновление
Я изменил несколько вещей:
install_name_tool -change
и нет install_name_tool -id
).@executable_name/components/Video.dylib
).Эти два изменения заставляют его работать. Однако мне еще не ясно, почему это работает. Я испытываю некоторые затруднения при понимании значения "идентификационного" свойства. Это, кажется, идентификатор в форме пути. Почему сделал изменение, оно для зависимых библиотек вызывает ошибки периода выполнения? Я попытаюсь найти ответы на те вопросы с некоторым дальнейшим экспериментированием...
возможно, вам стоит подумать о статической компиляции вашего кода. Это намного лучше прикрепит ваши зависимости к вашей программе
если вы используете gcc, просто добавьте -static
GStreamer - сложная система с множеством зависимости. Использование инструментов обнаружит разделяемые библиотеки, которые напрямую требуются GStreamer, но они наверняка пропустят библиотеки, загружаемые динамически, файлы конфигурации, а также данные перевода.
Этот сайт, вероятно, содержит некоторую полезную информацию о создании автономного пакета GStreamer, который может упростить процесс объединения.