问题陈述:
我希望从 Clojure 命名空间调用 QuantLib Java 函数,如下所示:
(Date. 21 Month/September 2013)
到目前为止,我已经完成了以下工作:
$ brew install boost
$ brew install quantlib
下载生成的 SWIG 接口。
创建了一个新的 Leiningen 项目。
将上述接口复制到 src/main/java/org/quantlib/
添加:
:jvm-opts ["-Djava.library.path=src/main/java"]
:java-source-paths ["src/main/java/"]
到我的project.clj
.
我按照Bojan Nikolic 的说明解决了一个非常相似的类加载问题,添加了一个 BKLoader 类。
当我core.clj
将文件加载到 REPL 中时,出现以下错误:
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)
此时,我从我的 ns 声明中删除了 B. Nikolic 的课程,core.clj
并查看了classlojure。
根据 Apage43 中的建议#clojure
,此时我将以下内容放入我的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"]