[英]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.