繁体   English   中英

Clojure / QuantLib互操作:类加载麻烦

[英]Clojure/QuantLib interop: classloading woes

问题陈述:

我希望从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)

这时,我从core.clj的ns声明中core.clj了B. Nikolic的类,然后看一看classlojure

每Apage43在建议#clojure ,在这一点上我把下面的到我的core.clj

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

导致与调用BKLoader类时相同的错误。

感谢您提供的任何见解。 谢谢!

解决方案是将QuantLib jar添加到project.clj:java-source-paths

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

该错误表明Java虚拟机找不到所需的DLL。

因此可能要加载的dll在src / main / java中无法从您启动文件的目录中找到,该目录是您通过指定文件来通过它找到的

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

有时是dll不在其中,但有时dll也想加载其他dll,因此在这种情况下,还应将环境变量PATH设置为指向可以加载其他dll的目录,这可能是个好主意。

Microsoft提供了一种工具,您可以在其中跟踪正在加载或需要dll的工具,一个是dependencyWalker,另一个是processmonitor。 两者均可从www.microsoft.com的某个位置免费下载

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM