gpt4 book ai didi

java - Clojure/QuantLib 互操作 : classloading woes

转载 作者:行者123 更新时间:2023-12-01 04:21:55 27 4
gpt4 key购买 nike

问题陈述:

我希望从 Clojure 命名空间调用 QuantLib Java 函数,如下所示:

(Date. 21 Month/September 2013)

到目前为止,我已经完成了以下操作:

$ brew install boost
$ brew install quantlib

已下载the generated SWIG interfaces .

创建了一个新的 Leiningen 项目。

将所述接口(interface)复制到 src/main/java/org/quantlib/

添加:

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

到我的project.clj

我已关注Bojan Nikolic's instructions on solving a very similar classloading problem ,添加一个类BKLoader。

当我将 core.clj 文件加载到 REPL 中时,出现以下错误:

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

博扬·尼科利奇有a recommendation来处理我在尝试运行它时实现的这些类加载问题。根据该链接,我添加了一个新的静态类 BKLoader 来加载 QuantLibJNI,将其与其他 Java 类一起加载,并尝试再次将 core.clj 加载到 REPL 中,结果是响亮的喇叭:

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

此时,我从 core.clj 的 ns 声明中删除了 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 可以加载的目录可能是个好主意已加载。

微软有一个工具可以跟踪DLL的加载或需要,一个是dependencyWalker,另一个是processmonitor。两者都可以从 www.microsoft.com 上免费下载

关于java - Clojure/QuantLib 互操作 : classloading woes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18822603/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com