Ich habe eine Anwendung, die Verknüpfung mit libjvm
erfordert (eine Bibliothek aus dem JDK benötigt JNI-Bindungen). Wenn ich die Position libjvm.dylib
mit -L
erteile, kompiliert und verbindet es erfolgreich. Allerdings, wenn ich die binäre laufen erhalte ich:Verknüpfen einer dynamischen Bibliothek (libjvm.dylib) in Mac OS X (rpath-Problem)
dyld: Library not loaded: @rpath/libjvm.dylib
Referenced from: <my home directory>/./mybinary
Reason: image not found
Bisher fand ich heraus, dass ich meine binäre Spezifizierungs LD_LIBRARY_PATH wie so laufen:
LD_LIBRARY_PATH=<path to libfolder installation> ./mybinary
Aber natürlich will ich nicht. Warum sollte ich den genauen Standort trotzdem angeben, wenn ich ihn jedes Mal, wenn ich die Anwendung starte, immer wieder geben muss ?!
Ich habe auch gelernt, dass dynamische Bibliotheken auf Mac OS X bekommen eine Art von Stempel, die dort Position sagt. Allerdings weiß ich nicht, was rpath
ist (scheint für mich eine Variable zu sein, aber wie kann ich es während des Linkens einstellen?).
Die Anwendung wird mit Haskell erstellt, aber ich kann die Objektdateien auch manuell mit ld
verknüpfen. Ich stecke jedoch auf dieser rpath-Sache fest - ist es vielleicht etwas Besonderes für die JDK-Bibliotheken? Hier
ist das, was ich tun, um zu bauen:
ghc --make Main.hs mycbinding.o -ljvm -L<javahome>/jre/lib/server -o mybinary