2

Haskell FFI 経由で Java Native Interface (ライブラリ libjvm として利用可能) を使用するライブラリがあります。そのため、一部のグルーコードは ac ファイルにあり、関数は FFI を介してインポートされ、それだけです。

cabal を使用して「frameworks: JavaVM」を指定すると、魔法のようにすべてが機能します。ただし、Java 6 のみがフレームワークに付属しています (オラクルが引き継いだため、Java 7 にはそのようなバンドルはインストールされていません)。そのため、ライブラリをフレームワーク JavaVM ではなく、libjvm にリンクしようとしています。

私はghcに次のフラグを使用しています:

  -ljvm
  -L/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib/server
  -L/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib
  -optl-Wl,-rpath,/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib/server

それらは--ghc-options、カバールを介してghcに渡されます。繰り返しますが、結果はライブラリになるはずです。これらのフラグを指定するかどうかに関係なく、コンパイルとインストールは成功しますが、ライブラリに依存する実行可能ファイルをビルドすると、コンパイルが失敗します (libjvm からシンボルを見つけることができません)。

これらの実行可能ファイルを手動でリンクすると (上記とまったく同じフラグを使用)、すべて問題ありません。しかし、図書館の利用者にその負担を押し付けたくはありませんframeworks: JavaVM。解決策と同じ「快適さ」が欲しいのです。

私は本当にこれに行き詰まっています.ghcに私のライブラリをlibjvmにリンクさせるにはどうすればよいですか? 詳細な出力 ("--ghc-option=-v3") も確認しましたが、リンク フラグの痕跡が見つかりません (ただし、フレームワークのフラグも見当たらないため、本当に混乱しています)。

4

0 に答える 0