我确实有一个需要链接的应用程序libjvm
(JDK 中的一个库需要进行 JNI 绑定)。当我告诉libjvm.dylib
使用-L
它的位置成功编译和链接。但是,当我运行二进制文件时,我得到:
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