Ho un'applicazione che richiede il collegamento con libjvm
(una libreria dal JDK necessaria per eseguire i binding JNI). Quando dico la posizione di libjvm.dylib
usando -L
compila con successo e collegamenti. Tuttavia quando ho eseguito il binario ottengo:Collegamento di una libreria dinamica (libjvm.dylib) in Mac OS X (problema rpath)
dyld: Library not loaded: @rpath/libjvm.dylib
Referenced from: <my home directory>/./mybinary
Reason: image not found
Finora ho scoperto che posso correre il mio binario LD_LIBRARY_PATH specificando in questo modo:
LD_LIBRARY_PATH=<path to libfolder installation> ./mybinary
Ma naturalmente io non voglio questo. Perché dovrei specificare la posizione esatta in ogni caso se devo darlo ancora e ancora ogni volta che avvio l'applicazione ?!
Ho anche imparato che le librerie dinamiche su mac os x ottengono un tipo di timbro che indica la posizione. Comunque non so cosa sia rpath
(mi sembra una variabile, ma come posso impostarlo durante il collegamento?).
L'applicazione viene creata utilizzando haskell, ma posso ugualmente collegare i file oggetto manualmente utilizzando ld
. Tuttavia, io sono bloccato su quella cosa rpath - è forse speciale per le librerie JDK?
Ecco quello che faccio al fine di costruire:
ghc --make Main.hs mycbinding.o -ljvm -L<javahome>/jre/lib/server -o mybinary