我确实有一个应用程序需要与libjvm
(需要执行JNI绑定的JDK库)链接。当我使用-L
告诉libjvm.dylib
的位置时,它成功编译和链接。然而,当我运行的二进制我得到:在Mac OS X(rpath问题)中链接动态库(libjvm.dylib)
dyld: Library not loaded: @rpath/libjvm.dylib
Referenced from: <my home directory>/./mybinary
Reason: image not found
到目前为止,我发现我可以运行我的二进制指定LD_LIBRARY_PATH像这样:
LD_LIBRARY_PATH=<path to libfolder installation> ./mybinary
但我当然不希望这样。为什么我应该指定确切的位置?如果我每次开始应用程序时必须一次又一次地提供它!
我还了解到,在mac os x上的动态库确实会得到一种告诉那里位置的邮票。但是我不知道rpath
是什么(对我来说好像是一个变量,但是我怎样才能在连接过程中设置它?)。
该应用程序使用haskell构建,但我同样可以使用ld
手动链接目标文件。然而,我被困在那个rpath的东西 - 这可能是特殊的JDK库?
这是我为了打造这样做:
ghc --make Main.hs mycbinding.o -ljvm -L<javahome>/jre/lib/server -o mybinary