Frage

Ich bin eine Plugin Anwendung erstellen (dylib), die auf mehreren anderen Bibliotheken abhängt. Diese anderen Bibliotheken sind auf meinem System installiert, sind aber nicht auf jedem System des Benutzers installiert werden garantiert. Also brauche ich einen Weg Bündel Abhängigkeiten zusammen mit meiner Anwendung finden.

Ich fand, dass ich otool zur Liste verwenden kann, oder die Pfade zu anderen dylibs ändern. Dies würde es ermöglichen, einen Ordner zu erstellen, die meine Plugin Anwendung bündelt und alle benötigten Abhängigkeiten.

Dies ist jedoch tun scheint manuell wie eine zeitraubende und stumm Aufgabe. Gibt es Dienstprogramme zur Verfügung, es zu automatisieren?

Oder vielleicht ist es falsch, ich tue, und es gibt einen besseren und offensichtlichen Ansatz für dieses Problem?

Bearbeiten Ich habe einen Skript dass automates meisten die Aufgabe.

War es hilfreich?

Lösung

Verwenden Sie relative Pfade in Ihrem dylib install_name_tool verwenden. Auf diese Weise können Sie sie einmal festgelegt, und das Verzeichnis überall installieren, ohne dass die Bibliotheken ändern bei der Installation.

Sie sollten alle Ihre dylib Abhängigkeiten in einem Ordner ablegen, dann install_name_tool verwenden, um die relative Lage der anderen dylibs Sie abhängen einzustellen. Angenommen, Ihre Bibliothek libmyfoo.dylib hängt von libbar.dylib:

install_name_tool -change "/Whatever/full/path/libbar.dylib" "@loader_path/libbar.dylib" libmyfoo.dylib

Auf diese Weise Ihre Bibliothek wird für libbar.dylib sucht immer im gleichen Verzeichnis, in dem libmyfoo.dylib befindet.

Sie können auch brauchen install_name_tool auf einige der anderen dylibs laufen, wenn sie voneinander abhängen.

Hüten Sie sich vor, die Dokumentation zu install_name_tool weist darauf hin, dass „Für dieses Werkzeug zu arbeiten, wenn die Installation von Namen oder rpaths größer sind die binäre sollte mit dem ld gebaut werden (1) -headerpad_max_install_names Option.“, so sicher sein, die -headerpad_max_install_names Befehlszeilenoption zu schließen, wenn Gebäude Ihre Bibliothek.

ist @loader_path die binäre relativ verwendet, um die dylib zu laden, in diesem Fall Ihrer libmyfoo.dylib. Verwenden @executable_path wenn Sie diese gestartet finden möchten die Bibliotheken in Bezug auf ausführbare die Bibliothek Ladesequenz.

Andere Tipps

Um Christopher Antwort zu vervollständigen, sind hier einige Links zu nützlichen Ressourcen:

Macdylibbundler ist ein handliches kleines Werkzeug, das genau das tut, was gefragt wird. Es sparte sicher mein Leben, wenn Binärdateien für OSX zu verteilen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top