問題文:
次のように、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 は、これらのクラスローディングの問題を処理するための推奨事項を持っています。そのリンクに従って、新しい静的クラスを追加してBKLoader
QuantLibJNI をロードし、それを他の 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-paths
inに追加することproject.clj
です。
:java-source-paths ["src/main/java" "/usr/local/lib/QuantLib.jar"]