Je développe une application qui utilise la bibliothèque GStreamer. Afin de faciliter le déploiement, j'aimerais collecter toutes les bibliothèques GStreamer dans un bundle local. Pour cela, j'ai écrit un petit script qui effectue les opérations suivantes:Comment déployer une application qui dépend des bibliothèques dynamiques?
- dépendances récursive traverse (en utilisant
otool -L
) - copie toutes les dépendances dans un répertoire local
- faire tous les chemins de dépendance par rapport à @executable_path (en utilisant
install_name_tool
)
(Si vous êtes intéressés, vous pouvez jeter un oeil à la Ruby script.)
Cependant, je vois maintenant des erreurs d'exécution sur l'appel 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
Ces erreurs ne se produisent que si j'utilise les bibliothèques localisées. Y a-t-il des «pièges courants» quand il s'agit d'utiliser install_name_tool?
Est-ce que quelqu'un a une idée de ce que je pourrais faire de mal? Si vous avez besoin de connaître certains détails, n'hésitez pas à demander.
Mise à jour
j'ai changé quelques petites choses:
- Pour les bibliothèques dépendantes je change maintenant que les chemins de dylib et non l'identifiant (utilisez uniquement
install_name_tool -change
et noninstall_name_tool -id
). Pour la bibliothèque principale, j'ai défini la valeur d'id relative au chemin exécutable (@executable_name/components/Video.dylib
).
Ces deux modifications le font fonctionner. Cependant, il n'est pas encore clair pour moi pourquoi cela fonctionne. J'ai quelques difficultés à comprendre la signification de la propriété "id". Il semble être identificateur sous la forme d'un chemin d'accès. Pourquoi l'avoir modifié pour les bibliothèques dépendantes provoque-t-il des erreurs d'exécution? Je vais essayer de trouver des réponses à ces questions avec un peu plus d'expérimentation ...
Pourriez-vous influencer l'ordre de chargement des dépendances respectives par accident? –
@gf: Je ne pense pas, mais je vais le garder à l'esprit. J'ai fait quelques progrès, vérifiez la modification si vous êtes intéressé. – StackedCrooked
Ne construisez-vous pas un ensemble .app? –