斯坦福CoreNLP python界面安装错误

Mat*_*teo 5 python java java-native-interface openjdk stanford-nlp

我正在尝试在Ubuntu 12.04.5 LTS上构建stanford NLP的python接口.需要两个步骤,第一步是:

  1. 通过在3rdParty/jpype中运行"rake setup"来编译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...]
Run Code Online (Sandbox Code Playgroud)

错误消息说我失踪了jni.h,所以如果我运行命令得到这里的建议.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
Run Code Online (Sandbox Code Playgroud)

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

如何正确配置这些路径?

Mat*_*teo 0

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

显然,当运行用于安装 StanleyNLP 的 python 接口的脚本时,如果JPype缺少,将使用以下命令进行安装:

python setup.py install
Run Code Online (Sandbox Code Playgroud)

现在,如果你打开该文件,setup.py你可以看到以下部分,它设置了javaLinux 机器的路径(我在 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"]
Run Code Online (Sandbox Code Playgroud)

显然,这条路径并不适用于每台机器,因此有两种可能的解决方案:

  1. 在运行安装脚本之前,导出一个名为JAVA_HOMEjava 安装位置的变量。即就我export JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64而言。

  2. 正如本页gcc所说,您可以使用以下命令设置自动包含变量export C_INCLUDE_PATH=some_path,并且该路径应设置为您计算机上的 java 库所在的位置