1

我正在尝试_ ABCL ( http://common-lisp.net/project/armedbear/ )。我按照 Freeling Java API 的 README 中的所有过程,使用 swig 编译 API。之后,我能够运行示例代码。

java -Djava.library.path=. -cp freeling.jar:. Analyzer < teste.text > teste.out

在这个 Analyzer.java 中,相关行是:

...
import edu.upc.freeling.*;
...
System.loadLibrary( "freeling_javaAPI" );
...
MacoOptions op = new MacoOptions( LANG );

在 ABCL 中,我尝试过:

(add-to-classpath "/Users/arademaker/Downloads/myfreeling/APIs/java/freeling.jar")
(jstatic "load" "java.lang.System" "/Users/arademaker/Downloads/myfreeling/APIs/java/libfreeling_javaAPI.so")
(jnew "edu.upc.freeling.MacoOptions" "en")

但我得到了错误:

Java exception 'java.lang.UnsatisfiedLinkError: edu.upc.freeling.freelingJNI.new_MacoOptions(Ljava/lang/String;)J'.
   [Condition of type JAVA-EXCEPTION]

有人有什么主意吗?Java 的 System.load 的 ABCL 有什么特殊问题吗?

4

2 回答 2

1

在调用 ABCL 之后,从 Lisp 中使用 JAVA:ADD-TO-CLASSPATH 被认为是更好的形式。

 (java:add-to-classpath (probe-file #p"freeling.jar"))

应该提供更多信息。ABCL有一个扩展的CL:PATHNAME概念

于 2013-10-05T20:26:49.407 回答
0

按照http://thread.gmane.org/gmane.lisp.armedbear.devel/2923中 Alessio Stalla 的建议,我能够解决我的问题。解决方案是不使用 -jar 参数加载 ABCL:

java -jar abcl.jar

但是建议使用命令行:

java -Djava.library.path=. -cp freeling.jar:abcl.jar org.armedbear.lisp.Main

看起来 -jar 使 java 忽略 -cp 参数:

http://docs.oracle.com/javase/1.4.2/docs/tooldocs/linux/java.html

尽管如此,它解释了部分谜团,因为我也尝试过:

(add-to-classpath "freeling.jar")

之前

(jstatic "load" "java.lang.System" ".../libfreeling_javaAPI.so")
(jnew "edu.upc.freeling.MacoOptions" "en")

所以使用“-jar”除了忽略“-cp”参数还有其他后果。

于 2013-07-10T18:32:31.510 回答