【问题标题】:Freeling : Unable to compile the Java API on UbuntuFreeling:无法在 Ubuntu 上编译 Java API
【发布时间】:2013-07-18 21:56:33
【问题描述】:

我目前正在尝试为 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 - 汽车制造 - 自动配置 - 库工具 - libboost-正则表达式-dev - libicu开发 - libboost 文件系统开发 - libboost-程序-选项-开发 - 痛饮

A.2) 下载最新版本的 Freeling: svn checkout http://devel.cpl.upc.edu/freeling/svn/trunkFreeling

A.3) 准备我的 Freeling 存储库: 当地的;库工具化;自动配置;自动制作-a

4) 构建和安装 Freeling: 。/配置 制作 须藤制作安装

步骤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) 设置位于 freeling/APIs/java/MakeFile 的 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 的虚拟机中工作的信息,我还尝试使用 Ubuntu12.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 天时间才找到解决方案,但没有成功。有人可以帮我吗?

提前谢谢你!

【问题讨论】:

    标签: c++ ubuntu compilation java apache-stanbol


    【解决方案1】:

    看来你比我优秀很多,但我注意到你设置了环境变量的路径,你是否也检查过你的系统使用的是哪个版本的java作为默认的整体?

    尝试使用

    sudo update-alternatives --config java
    

    并确保使用了正确的 JDK。

    如果您已经解决了这个问题,我很想听听您的解决方案(因为您不久前发布了此问题)。

    【讨论】:

      猜你喜欢
      • 2016-12-17
      • 1970-01-01
      • 2016-10-25
      • 2020-08-10
      • 2015-01-20
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多