2014-11-05 65 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