【发布时间】:2013-01-17 09:02:39
【问题描述】:
我确实有一个需要与libjvm 链接的应用程序(JDK 中的一个库需要进行 JNI 绑定)。当我使用-L 告诉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
【问题讨论】:
标签: macos haskell linker java-native-interface ghc