Die Verknüpfung einer dynamischen Bibliothek (libjvm.dylib) in Mac OS X (rpath Ausgabe)
Ich habe eine Anwendung, die erfordert, dass eine Verknüpfung mit libjvm
(eine Bibliothek aus dem JDK benötigt zu tun, JNI bindings). Wenn ich sage die Lage des libjvm.dylib
mit -L
es erfolgreich kompiliert und verlinkt. Jedoch wenn ich den binären ich bekommen:
dyld: Library not loaded: @rpath/libjvm.dylib
Referenced from: <my home directory>/./mybinary
Reason: image not found
Bisher fand ich heraus, dass ich mein binäre Angabe LD_LIBRARY_PATH so:
LD_LIBRARY_PATH=<path to libfolder installation> ./mybinary
Aber natürlich möchte ich nicht, dass. Warum sollte ich die angeben, die genaue Lage jedenfalls, wenn ich es wieder und wieder, jedes mal, wenn ich die Anwendung starten?!
Ich habe auch gelernt, dass dynamische Bibliotheken auf mac os x bekommt eine Art Stempel, der sagt, es Lage. Allerdings weiß ich nicht, was rpath
ist (scheint wie eine variable zu mir, aber wie kann ich es einstellen, während die Verknüpfung?).
Die Anwendung wurde mit haskell, aber ich kann ebenso gut link den Objekt-Dateien manuell mithilfe ld
. Allerdings bin ich mir stecken, dass rpath Sache - ist es vielleicht Besondere an der JDK-Bibliotheken?
Hier ist, was ich tun, um zu bauen:
ghc --make Main.hs mycbinding.o -ljvm -L<javahome>/jre/lib/server -o mybinary
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom Apple dyld Mann Seite:
Müssen Sie gehen
-rpath path/containing/the/library
zuld
wenn die Verknüpfung Ihrer binären erzählen, wo zu suchen wenn die Erweiterung der@rpath/
Präfix in der shared library load-Befehl. Mit GHC können Sie die-optl-Wl
argument zu haben, es pass-flags durch, umld
, so dass Sie aufrufen möchten GHC etwa so: