Ho un'app, chiamiamola Animal.app
. All'interno della sua cartella Contents/Frameworks
c'è un framework, ad esempio Mammal.framework
. E all'interno della cartella Versions/A/Frameworks
del framework, ho dog.dylib
. Il nome di installazione di dog.dylib
è @ rpath/dog.dylib. Per l'impostazione "Runpath Search Paths"
del framework, ho specificato @loader_path/../Frameworks
. (La mia motivazione a quella ultima impostazione è che il "loader" della dylib sarebbe il binario del quadro, nel percorso Mammal.framework/Versions/A/Mammal
.)@rpath per una libreria dinamica incorporata in un framework
ricevo un messaggio di errore in fase di esecuzione:
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 Ho letto la documentazione "Run-Path Dependent Libraries" di Apple e il post sul blog di Mike Ash su @rpath
, ma non riesco ancora a vedere cosa sto facendo male.
Sì, per essere chiari: la directory di installazione per il dylib nidificato e il suo framework padre dovrebbe essere "@rpath". Il framework genitore include quindi "@ loader_path/Frameworks" nei suoi percorsi di ricerca del percorso di esecuzione (poiché il dylib termina come un fratello della cartella Frameworks); l'app che utilizza questo framework include "@loader_path /../ Frameworks" (poiché l'eseguibile è inattivo in MacOS). L'app potrebbe anche usare '@ executable_path', ma' @ loader_path' sembra più bello :-) – natevw
Non capisco cosa hai effettivamente fatto per farlo funzionare ... spiegamelo come se fossi 6. –
@ Prof.Falken: Nelle impostazioni di compilazione per il framework, sotto Collegamento, c'è un'impostazione chiamata "Percorsi di ricerca percorso". Ho impostato il suo valore su '@ loader_path/Frameworks'. – JWWalker