【发布时间】:2015-10-27 18:30:46
【问题描述】:
我有一个 JNI 库,包括 .jar 和 .so 文件。请注意,该库适用于 Java,而不是 Clojure。现在,我已经能够在 Eclipse 上使用 Java 中的库运行代码。
我现在要做的是让库通过其 Java 互操作功能在 Clojure 上运行。我通过创建一个 jar 文件成功地做到了这一点,但它不适用于 REPL。
这是我到目前为止所做的:
首先,我设置了一个 leiningen 项目并使用 JNI 绑定导入了 jar,这样我就可以按预期正确导入并查看库中的类。
-
然后,我将本机库添加到我的 LD_LIBRARY_PATH(这是该库在 Java 中运行所必需的),即使在 REPL 上加载它似乎也很好(没有错误)。
此时,当尝试使用库中的任何构造函数(或函数)时,我会收到链接器错误:
UnsatisfiedLinkError edu.upc.freeling.freelingJNI.new_Tokenizer(Ljava/lang/String;)J edu.upc.freeling.freelingJNI.new_Tokenizer (freelingJNI.java:-2)
请注意,同一行代码既可以在 Java 上运行,也可以在使用“lein uberjar”生成的 Clojure jar 中运行。
我对 Clojure 还是很陌生,不知道可能出了什么问题,看看 jar 版本的运行情况如何。
有什么线索吗?
【问题讨论】:
标签: java clojure java-native-interface leiningen read-eval-print-loop