1

問題文:

次のように、Clojure 名前空間から QuantLib Java 関数を呼び出したいと考えています。

(Date. 21 Month/September 2013)

これまでのところ、次のことを行いました。

$ brew install boost
$ brew install quantlib

生成された SWIG インターフェイスをダウンロードしました。

新しいライニンゲン プロジェクトを作成しました。

上記のインターフェースを src/main/java/org/quantlib/ にコピーしました

追加した:

:jvm-opts ["-Djava.library.path=src/main/java"]
:java-source-paths ["src/main/java/"]

私にproject.clj

クラス BKLoader を追加して、非常によく似たクラスローディングの問題を解決するための Bojan Nikolic の指示に従いました。

ファイルを REPLにロードするとcore.clj、次のエラーが発生します。

UnsatisfiedLinkError org.quantlib.QuantLibJNI.new_Date__SWIG_1(III)J org.quantlib.QuantLibJNI.new_Date__SWIG1 (QuantLibJNI.java:-2)

Bojan Nikolic は、これらのクラスローディングの問題を処理するための推奨事項を持っています。そのリンクに従って、新しい静的クラスを追加してBKLoaderQuantLibJNI をロードし、それを他の Java クラスと共にロードcore.cljし、REPL へのロードを再度試みました。

UnsatisfiedLinkError no QuantLibJNI in java.library.path java.lang.Classloader.loadLibrary (ClassLoader.java:1758)

その時点で、B. Nikolic のクラスを my の ns 宣言からcore.clj取り出して、classlojureを調べます。

の Apage43 の提案に従って#clojure、この時点で以下を my にドロップしますcore.clj

(classlojure/with-classloader
  (.getClassLoader Date) 
  (System/loadLibrary "QuantLibJNI"))

BKLoaderクラスを呼び出すときと同じエラーが発生します。

皆さんがもたらすことができる洞察に感謝します。ありがとう!

解決

解決策は、QuantLib jar を:java-source-pathsinに追加することproject.cljです。

:java-source-paths ["src/main/java" "/usr/local/lib/QuantLib.jar"]
4

1 に答える 1

0

このエラーは、Java VM が必要な DLL を見つけられないことを示しています。

そのため、ロードしたい dll は、指定したファイルを起動したディレクトリから src/main/java で利用できない可能性があります。

:jvm-opts ["-Djava.library.path=src/main/java"]

DLL がそこにない場合もありますが、DLL が他の DLL をロードしたい場合もあるため、その場合は、環境変数 PATH を他の DLL をロードできるディレクトリを指すように設定することをお勧めします。

dll がロードされているか必要であるかを追跡できる Microsoft のツールがあります。1 つは依存関係ウォーカーで、もう 1 つはプロセスモニターです。どちらも www.microsoft.com のどこかから無料でダウンロードできます

于 2013-09-16T07:55:37.963 に答える