我正在尝试从ABCL (http://common-lisp.net/project/armedbear/)调用Freeling (http://nlp.lsi.upc.edu/freeling/) Java API (http://devel.cpl.upc.edu/freeling/svn/trunk/APIs/java/)。我遵循Freeling Java API自述文件中的所有过程,使用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有什么特别的问题吗?
发布于 2013-10-06 04:26:49
在调用ABCL之后,从Lisp中使用JAVA:ADD- to -CLASSPATH被认为是更好的形式。
(java:add-to-classpath (probe-file #p"freeling.jar"))应该提供更多信息。ABCL对CL:PATHNAME有一个扩展的概念
发布于 2013-07-11 02:32:32
根据Alessio Stalla在http://thread.gmane.org/gmane.lisp.armedbear.devel/2923上的建议,我能够解决我的问题。解决方案是加载ABCL,而不是使用-jar参数:
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")因此,除了忽略"-cp“参数之外,使用"-jar”还有其他后果。
https://stackoverflow.com/questions/17556912
复制相似问题