Вызывающий свободный API Java от ABCL
Я пытаюсь вызвать Фрилинг ( http://nlp.lsi.upc.edu/freeling/) Java API ( http://devel.cpl.upc.edu/freeling/svn/trunk/APIs/java/) из ABCL ( http://common-lisp.net/project/armedbear/). Я следовал всей процедуре, изложенной в README Frelling 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]
У кого-нибудь есть идеи? Любая особая проблема ABCL с System.load Java?
2 ответа
Лучше всего использовать JAVA:ADD-TO-CLASSPATH из Lisp после вызова ABCL.
(java:add-to-classpath (probe-file #p"freeling.jar"))
должен дать больше информации. ABCL имеет обширное понятие CL:PATHNAME
Следуя предложению Алессио Сталлы в 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")
Поэтому использование "-jar" имеет и другие последствия, кроме игнорирования параметра "-cp".