Freeling:无法在Ubuntu上编译Java API
Freeling : Unable to compile the Java API on Ubuntu
我目前正在尝试为Freeling创建Java API,以便在Stanbol上使用它。通过这种方式,我遵循了Freeling文档中给出的所有说明(此处:https://github.com/insideout10/stanbol-freeling)没有成功。这似乎是JDK的一个问题,但我真的不知道如何修复它。这就是我所做的:
步骤A,用C++编译Freeling(这里没有问题):
A.1)安装以下软件包(带有"sudo apt-get-Install"):-构建必需-zlib1g dev-libboost1.48-all-dev-自动制造-autoconf-libtool-libboost regex dev-libicu dev-libboost文件系统开发-libboost程序选项dev-swig
A.2)下载最新版本的Freeling:svn校验http://devel.cpl.upc.edu/freeling/svn/trunk冻结
A.3)准备我的Freeling存储库:aclocal;libtoolize;autoconf;automake-
4)构建并安装Freeling:./configure制作sudo制作安装
步骤B编译Java API(我的问题就在这一步):
1)将位于freeling/APIs/common/freeling.i的freeling.i替换为给定的freeling.i:[url]https://raw.github.com/ziodave/freeling-brew-formula/master/APIs/common/freeling.i[/url]
2)将Makefile的参数设置为freeling/APIs/java/Makefile
我的Makefile如下:
# Change these paths to match your installation
# Alternatively, you can call 'make' overriding variable values, E.g.:
# make FREELINGDIR=/my/freeling/dir SWIGDIR=/my/swig/dir JAVADIR=/my/java/dir
FREELINGDIR = /home/saturn/freeling
SWIGDIR = /usr/share/swig2.0
JAVADIR = /usr/lib/jvm/jdk1.7.0_25
# you may change the package name if you want
PACKAGE = edu/upc/freeling
JPACKAGE = edu.upc.freeling
# Change your compiler, if necessary.
GCC=g++
all: freeling_javaAPI.cxx libfreeling_javaAPI.so
.PHONY: all
# Compile the C++ API
libfreeling_javaAPI.so: freeling_javaAPI.cxx
$(GCC) -shared -o libfreeling_javaAPI.so freeling_javaAPI.cxx -lfreeling -L$(FREELINGDIR)/lib -I$(FREELINGDIR)/include -I$(JAVADIR)/include -I$(JAVADIR)/include/linux -fPIC
$(JAVADIR)/bin/javac $(PACKAGE)/*.java
$(JAVADIR)/bin/jar -cf freeling.jar $(PACKAGE)
# Build the Java JNI wrapper classes.
freeling_javaAPI.cxx: freeling_javaAPI.i ../common/freeling.i
rm -rf $(PACKAGE)
mkdir -p $(PACKAGE)
swig -java -c++ -package $(JPACKAGE) -outdir $(PACKAGE) -o freeling_javaAPI.cxx -I$(SWIGDIR)/java -I$(SWIGDIR)/std -I$(SWIGDIR) freeling_javaAPI.i
clean:
rm -rf *.jar *.so *.cxx *.class edu
java -> $(JAVADIR)/bin/java
jar -> $(JAVADIR)/bin/jar
3)运行make
我得到以下结果:
g++ -shared -o libfreeling_javaAPI.so freeling_javaAPI.cxx -lfreeling -L/usr/local/share/freeling/lib -I/usr/local/share/freeling/include -I/usr/lib/jvm/jdk1.7.0_25/include -I/usr/lib/jvm/jdk1.7.0_25/include/linux -fPIC
freeling_javaAPI.cxx: In function ‘jlong Java_edu_upc_freeling_freelingJNI_new_1TreeIteratorNode_1_1SWIG_10(JNIEnv*, jclass)’:
freeling_javaAPI.cxx:2995:3: error: ‘tree_iterator’ was not declared in this scope
freeling_javaAPI.cxx:2995:3: note: suggested alternative:
/usr/local/include/freeling/tree.h:47:7: note: ‘freeling::tree_iterator’
freeling_javaAPI.cxx:2995:18: error: ‘node’ was not declared in this scope
freeling_javaAPI.cxx:2995:18: note: suggested alternative:
/usr/local/include/freeling/morfo/language.h:372:14: note: ‘freeling::node’
freeling_javaAPI.cxx:2995:23: error: ‘tree’ was not declared in this scope
freeling_javaAPI.cxx:2995:23: note: suggested alternative:
/usr/local/include/freeling/tree.h:35:26: note: ‘freeling::tree’
freeling_javaAPI.cxx:2995:36: error: expected primary-expression before ‘>’ token
freeling_javaAPI.cxx:2995:39: error: ‘result’ was not declared in this scope
freeling_javaAPI.cxx:2999:46: error: expected primary-expression before ‘>’ token
freeling_javaAPI.cxx:2999:49: error: expected primary-expression before ‘)’ token
freeling_javaAPI.cxx:2999:50: error: expected ‘;’ before ‘new’
freeling_javaAPI.cxx:3000:38: error: expected primary-expression before ‘>’ token
freeling_javaAPI.cxx:3000:42: error: expected primary-expression before ‘)’ token
freeling_javaAPI.cxx: In function ‘jlong Java_edu_upc_freeling_freelingJNI_new_1TreeIteratorNode_1_1SWIG_11(JNIEnv*, jclass, jlong, jobject)’:
freeling_javaAPI.cxx:3007:3: error: ‘tree’ was not declared in this scope
freeling_javaAPI.cxx:3007:3: note: suggested alternative:
/usr/local/include/freeling/tree.h:35:26: note: ‘freeling::tree’
freeling_javaAPI.cxx:3007:9: error: ‘node’ was not declared in this scope
freeling_javaAPI.cxx:3007:9: note: suggested alternative:
/usr/local/include/freeling/morfo/language.h:372:14: note: ‘freeling::node’
freeling_javaAPI.cxx:3007:17: error: ‘arg1’ was not declared in this scope
freeling_javaAPI.cxx:3007:39: error: expected primary-expression before ‘)’ token
freeling_javaAPI.cxx:3007:41: error: expected ‘;’ before numeric constant
freeling_javaAPI.cxx:3008:3: error: ‘tree_iterator’ was not declared in this scope
freeling_javaAPI.cxx:3008:3: note: suggested alternative:
[...]
Java_edu_upc_freeling_freelingJNI_ParseTree_1SWIGUpcast(JNIEnv*, jclass, jlong)’:
freeling_javaAPI.cxx:12567:7: error: ‘tree’ was not declared in this scope
freeling_javaAPI.cxx:12567:7: note: suggested alternative:
/usr/local/include/freeling/tree.h:35:26: note: ‘freeling::tree’
freeling_javaAPI.cxx:12567:13: error: ‘node’ was not declared in this scope
freeling_javaAPI.cxx:12567:13: note: suggested alternative:
/usr/local/include/freeling/morfo/language.h:372:14: note: ‘freeling::node’
freeling_javaAPI.cxx:12567:22: error: expected primary-expression before ‘)’ token
freeling_javaAPI.cxx:12567:36: error: ‘parse_tree’ was not declared in this scope
freeling_javaAPI.cxx:12567:36: note: suggested alternative:
/usr/local/include/freeling/morfo/language.h:423:14: note: ‘freeling::parse_tree’
freeling_javaAPI.cxx:12567:49: error: expected primary-expression before ‘)’ token
freeling_javaAPI.cxx: In function ‘jlong Java_edu_upc_freeling_freelingJNI_Depnode_1SWIGUpcast(JNIEnv*, jclass, jlong)’:
freeling_javaAPI.cxx:12575:7: error: ‘node’ was not declared in this scope
freeling_javaAPI.cxx:12575:7: note: suggested alternative:
/usr/local/include/freeling/morfo/language.h:372:14: note: ‘freeling::node’
freeling_javaAPI.cxx:12575:14: error: expected primary-expression before ‘)’ token
freeling_javaAPI.cxx:12575:28: error: ‘depnode’ was not declared in this scope
freeling_javaAPI.cxx:12575:28: note: suggested alternative:
/usr/local/include/freeling/morfo/language.h:452:14: note: ‘freeling::depnode’
freeling_javaAPI.cxx:12575:38: error: expected primary-expression before ‘)’ token
freeling_javaAPI.cxx: In function ‘jlong Java_edu_upc_freeling_freelingJNI_DepTree_1SWIGUpcast(JNIEnv*, jclass, jlong)’:
freeling_javaAPI.cxx:12583:7: error: ‘tree’ was not declared in this scope
freeling_javaAPI.cxx:12583:7: note: suggested alternative:
/usr/local/include/freeling/tree.h:35:26: note: ‘freeling::tree’
freeling_javaAPI.cxx:12583:13: error: ‘depnode’ was not declared in this scope
freeling_javaAPI.cxx:12583:13: note: suggested alternative:
/usr/local/include/freeling/morfo/language.h:452:14: note: ‘freeling::depnode’
freeling_javaAPI.cxx:12583:25: error: expected primary-expression before ‘)’ token
freeling_javaAPI.cxx:12583:39: error: ‘dep_tree’ was not declared in this scope
freeling_javaAPI.cxx:12583:39: note: suggested alternative:
/usr/local/include/freeling/morfo/language.h:478:14: note: ‘freeling::dep_tree’
freeling_javaAPI.cxx:12583:50: error: expected primary-expression before ‘)’ token
make: *** [libfreeling_javaAPI.so] Error 1
如果我理解的话,Makefile只是调用JDK并遇到错误。
我试着用旧版本更改JDK(我试过用JDK7、JDK6和SDK6),但结果是一样的。
关于我在使用Ubuntu12.04 x64的虚拟机中工作的信息,我也尝试使用Ubuntu22.04 x32编译Freeling,但结果是一样的。
我在.bashrc上添加了以下行:
JAVA_HOME=/usr/lib/jvm/jdk1.7.0_25
MAVEN_OPTS="-Xmx2048m -XX:MaxPermSize=2048m"
JAVA_OPTS="-Xmx2048m -XX:MaxPermSize=2048m"
ANT_OPTS="-Xmx2048m -XX:MaxPermSize=2048m"
JVM_ARGS="-Xmx2048m -XX:MaxPermSize=2048m"
export MAVEN_OPTS
export JAVA_OPTS
export ANT_OPTS
export JVM_ARGS
export JAVA_HOME
我觉得我做错了什么,但我真的不知道是什么,我花了3天时间寻找解决方案,但没有成功。有人能帮我吗?
提前谢谢!
所以看起来你比我优秀得多,但我注意到你设置了环境变量的路径,你是否也检查了一下,以确保你的系统总体上使用的是哪个版本的java?
尝试使用
sudo update-alternatives --config java
并确保使用正确的JDK。
如果你已经解决了这个问题,我很想听听你的解决方案(因为你不久前发布了这个)。
- 尝试用java代码编译和运行c++代码
- 在由Sublime文本3编译后在cmd上显示Java程序输出
- 编译 Java TD 客户端时出现构建错误
- 在为 Java 编译动态链接文件时,我应该选择哪些 g++ 参数
- 使用 C++ 编译和运行 java 文件时无法装入主类
- 在SWIG和Visual Studio 2015中使用Java中编译的DLL
- 在Java(JNI)中与Mingw C 一起编译64位静态LIB
- 如何在Raspberry pi中使用JNI GPIO原生库编译和运行Java程序
- 用java编写源代码,并将其编译为其他语言的各种可执行文件?多重编译
- 使用jni.h在C++中编译java方法时出现构建错误
- 如何编译Java原生库
- 在Java/PHP/Python框架内,在编译的C/C++代码中运行算法
- 通过JNI调用简单的java静态方法是不起作用的,尽管c++编译并运行它
- 我们有没有像c一样用java进行条件编译
- 为什么这个布尔值在 C++ 而不是 Java 中编译
- 使用通配符编译 Java 泛型以C++模板
- 如何使用C++编译.java文件
- 在机器上运行时,编译的源代码(C++、Java 等)涉及哪些安全问题
- 使用 Java 1.5 编译节俭生成的类时出错
- Freeling:无法在Ubuntu上编译Java API