2012-10-23 19 views
9

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.

risposta

6

Si scopre che il percorso di ricerca del percorso di destra è @loader_path/Frameworks. Quello che mi mancava era che @loader_path rappresentasse, non il percorso completo del loader, ma quel percorso meno il suo ultimo componente. Mike Ash's blog post lo dice, ma in qualche modo l'ho perso. Quindi, nel caso di un framework, @loader_path termina con A.

+0

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

+1

Non capisco cosa hai effettivamente fatto per farlo funzionare ... spiegamelo come se fossi 6. –

+2

@ 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

Problemi correlati