libjvm
(JNI バインディングを行うために必要な JDK のライブラリ)とのリンケージを必要とするアプリケーションがあります。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