【问题标题】:Stanford CoreNLP python interface installation errors斯坦福CoreNLP python接口安装错误
【发布时间】:2014-11-05 16:31:05
【问题描述】:

我正在尝试在 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...]

错误消息显示我缺少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)。

如何正确配置这些路径?

【问题讨论】:

    标签: java python java-native-interface stanford-nlp openjdk


    【解决方案1】:

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

    根据您的 grep,jni.h 位于此处:/usr/lib/jvm/java-7-openjdk-amd64/include/jni.h

    gcc 参数中指定的包含路径为:-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 文件。

    【讨论】:

    • 非常感谢您的回答!这正是问题所在,唯一的问题是我不知道如何解决它;)虽然现在管理!
    【解决方案2】:

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

    JPype compile problems

    所以在构建之前使用:

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

    【讨论】:

    • 是的,实际上我只是自己想出来的!大声笑,这是一种使用赏金的奇怪方式......;它让我更有动力去寻找我猜想的答案!
    • 我现在遇到了类似的错误,但这次是Python.h 路径:src/native/python/include/jpype_python.h:24:20: fatal error: Python.h: No such file or directory。由于setup.py 中没有变量,您知道我应该做什么吗?谢谢
    • 验证你有 pyrhon-dev 包。它在您的发行版上可能有一个稍微不同的名称。
    【解决方案3】:

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

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

    python setup.py install
    

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

    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"]
    

    显然这条路径不会在每台机器上都有效,因此有两种可能的解决方案:

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

    2. 正如this page 所说,您可以使用以下命令export C_INCLUDE_PATH=some_pathgcc 设置一个自动包含变量,并且该路径应设置为您机器上Java 库所在的位置

      李>

    【讨论】:

      猜你喜欢
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多