Ich habe eine App, rufen Sie Animal.app
. In seinem Ordner Contents/Frameworks
ist ein Framework, sagen Mammal.framework
. Und innerhalb des Ordners Versions/A/Frameworks
des Rahmens habe ich dog.dylib
. Der Installationsname dog.dylib
lautet @ rpath/dog.dylib. Für die "Runpath Search Paths"
Einstellung des Frameworks habe ich @loader_path/../Frameworks
angegeben. (Meine Argumentation für die letzte Einstellung ist, dass der „Lader“ des dylib die binären des Rahmens sein würde, auf dem Weg Mammal.framework/Versions/A/Mammal
.)@rpath für eine dynamische Bibliothek in einem Framework eingebettet
Ich erhalte eine Fehlermeldung zur Laufzeit:
Dyld Error Message:
Library not loaded: @rpath/dog.dylib
Referenced from: /Volumes/VOLUME/*/Animal.app/Contents/MacOS/../Frameworks/Mammal.framework/Versions/A/Mammal
Reason: image not found
I Ich habe Apples "Run-Path Dependent Libraries" -Dokumentation gelesen und Mike Ashs Blogbeitrag auf @rpath
, aber ich kann immer noch nicht sehen, was ich falsch mache.
Ja, um klar zu sein: Das Installationsverzeichnis für Ihre verschachtelte dylib und das übergeordnete Framework sollte "@rpath" lauten. Das übergeordnete Framework enthält dann "@ loader_path/Frameworks" in seinen Pfadpfaden-Suchpfaden (da die dylib als Geschwister des Frameworks-Ordners endet); Die App, die dieses Framework verwendet, enthält "@loader_path /../ Frameworks" (da die ausführbare Datei in MacOS heruntergefahren ist). Die App könnte '@ executable_path' genauso gut verwenden, aber' @ loader_path' scheint cooler zu sein :-) – natevw
Ich verstehe nicht, was du getan hast, damit es funktioniert ... erkläre es mir, als wäre ich 6. –
@ Prof.Falken: In den Build-Einstellungen für das Framework gibt es unter Linking eine Einstellung namens "Runpath Search Paths". Ich setze den Wert auf '@ loader_path/Frameworks'. – JWWalker