2014-11-05 88 views
5

我试图在Ubuntu 12.04.5 LTS上构建stanford NLP的python界面。 有需要两个步骤,第一个是:在的3rdParty/jpype运行“耙设置”Stanford CoreNLP python界面安装错误

  1. 编译Jpype

在这样做时,我得到以下错误:

In file included from src/native/common/jp_monitor.cpp:17:0: 
src/native/common/include/jpype.h:45:17: fatal error: jni.h: No such file or directory 
compilation terminated. 
error: command 'gcc' failed with exit status 1 
rake aborted! 
Command failed with status (1): [cd JPype-0.5.4.1 && python setup.py build...] 

错误消息说我缺少jni.h,所以建议here如果我运行命令dpkg-query -L openjdk-7-jdk | grep "jni.h"得到/usr/lib/jvm/java-7-openjdk-amd64/include/jni.h

我相信这意味着我的系统上有jni.h,所以我现在很困惑。什么导致了错误?你能提出任何解决办法吗?

感谢您的帮助!


几个洞察

这里是指令导致错误:

gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/lib/jvm/java-1.5.0-sun-1.5.0.08/include -I/usr/lib/jvm/java-1.5.0-sun-1.5.0.08/include/linux -Isrc/native/common/include -Isrc/native/python/include -I/usr/include/python2.7 -c src/native/common/jp_class.cpp -o build/temp.linux-x86_64-2.7/src/native/common/jp_class.o 
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for Ada/C/ObjC but not for C++ [enabled by default] 
In file included from src/native/common/jp_class.cpp:17:0:src/native/common/include/jpype.h:45:17: fatal error: jni.h: No such file or directory 
compilation terminated. 
error: command 'gcc' failed with exit status 1 

它从所需Python接口的JPype编译到来。我不知道为什么,但它包含我的文件系统中没有的路径(即-I/usr/lib/jvm/java-1.5.0-sun-1.5.0.08/include/linux)。

如何正确配置这些路径?

回答

0

这个问题是一个路径问题(如问题所说和@vikramls正确回答)。

显然运行脚本时用于安装StanfordNLP的Python接口,如果JPype缺少它会被安装使用下面的命令:

python setup.py install 

现在,如果你打开文件setup.py你可以看到下面的部分它设置了一台Linux机器的java路径(我的Ubuntu上运行):

def setupLinux(self): 
    self.javaHome = os.getenv("JAVA_HOME") 
    if self.javaHome is None : 
     self.javaHome = '/usr/lib/jvm/java-1.5.0-sun-1.5.0.08' # Ubuntu linux 
     # self.javaHome = '/usr/java/jdk1.5.0_05'  
    self.jdkInclude = "linux"  
    self.libraries = ["dl"] 
    self.libraryDir = [self.javaHome+"/lib"] 

显然,这条路就不会在每次机器上工作,所以有2个可能的解决方案:

  1. 之前运行安装脚本导出您的Java安装的位置称为JAVA_HOME变量。即export JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64在我的情况。

  2. 由于this page说,你可以设置一个自动包括gcc使用以下命令export C_INCLUDE_PATH=some_path和路径变量应设置为你的Java库是你的机器上

2

指定的包含路径不包括jni.h所在的路径。

从你的grep,jni.h位于:/usr/lib/jvm/java-7-openjdk-amd64/include/jni.h

中的包括GCC ARGS指定的路径是:-I/usr/lib/jvm/java-1.5.0-sun-1.5.0.08/include -I/usr/lib/jvm/java-1.5.0-sun-1.5.0.08/include/linux -Isrc/native/common/include -Isrc/native/python/include -I/usr/include/python2.7

声音对我说,你用错了构建Java?你有一个java-1.5.0安装和一个java-7-openjdk安装 - 这一个有缺少的jni.h文件。

+0

非常感谢你的答案在哪里!这正是问题所在,唯一的问题是我不知道如何解决问题;)尽管现在管理! – Matteo 2014-11-07 17:44:00

2

根据以下问题,您可以通过设置JAVA_HOME来解决此问题。

JPype compile problems

所以建立使用前:

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 
+0

是的,我其实只是想到了我自己!大声笑,这是一种使用赏金的奇怪方式......; D让我更有动力去找到我猜的答案! – Matteo 2014-11-07 17:35:39

+0

我现在得到一个类似的错误,但是这次使用'Python.h'路径:'src/native/python/include/jpype_python.h:24:20:致命错误:Python.h:没有这样的文件或目录。既然'setup.py'中没有变量,那么你是否知道我应该做什么?谢谢 – Matteo 2014-11-07 18:09:37

+0

确认你有pyrhon-dev软件包。它可能在你的发行版上有一个稍微不同的名字。 – kichik 2014-11-07 18:10:55