2010-09-06 106 views
2

我與JPype有一個正確的老噩夢。我有我的開發環境在Windows上,所以嘗試在那裏安裝它沒有運氣。然後我嘗試了Ubunto也沒有運氣。我現在有點絕望了。我使用的是Mingw32,因爲我嘗試安裝VS2008,但它告訴我必須安裝XP SP2,但我在Vista上。我試過VS2010,但沒有運氣,我得到'錯誤:無法找到vcvarsall.bat'錯誤。無論如何,我現在在Mingw32JPype編譯問題

最終我試圖使用Neo4j和Python,因此我需要使用JPype。我已經在MySQL網絡上發現了許多關於這個問題的參考,但他們並沒有幫助我使用JPype。

如果我可以修復unix或windows,我可以得到這樣的幫助將會非常感激。

這裏的版本..

Windows系統:Vista的64 的Python:2.6 編譯MINGW32:最新版本 Jpype:0.5.4.1 Java的信息: Java版本 「1.6.0_13」 的Java(TM) SE運行時環境(建立1.6.0_13-B03) 的HotSpot的Java(TM)64位服務器VM(建11.3-B02,混合模式)

我運行:

蟒蛇的setup.py安裝--comp iler = wingw32

並獲得以下輸出。

選擇Windows配置文件 運行安裝 運行建立運行build_py 運行build_ext 建設 '_jpype' 擴展 Ç :\ MinGW的\ BIN \ gcc.exe -mno-cygwin的-mdll -O -Wall -DWIN32 = 1「-IC:\ Program Files(x86)\ Java \ jdk1.6.0_21/include」「-IC:\ Program Files(x86)\ Java \ jdk1.6.0_21/include/win32」-Isrc/native/common/include -Isrc/native/python/include -Ic:\ Python26 \ include -Ic:\ Python26 \ PC -c src/native/common/jp_array.cpp -o build \ temp.win32-2.6 \ Release \ src \ native \ common \ jp_array.o/EHsc src/native/common/jp_array.cpp:在成員函數'void JPArray :: setRange(int,int,std :: vector &)'中: sr c/native/common/jp_array.cpp:56:13:警告:在有符號和無符號整數表達式之間進行比較 src/native/common/jp_array.cpp:68:4:警告:不推薦將字符串常量轉換爲'char *' src/native/common/jp_array.cpp:在成員函數'void JPArray :: setItem(int,HostRef *)'中: src/native/common/jp_array.cpp:80:3:警告:不推薦使用字符串常量到 '字符*' GCC:/ EHSC:沒有這樣的文件或目錄 錯誤:命令 'GCC' 與退出狀態失敗1

所以在UNIX Ubunto的問題如下:

Java版本:1.6 .0_18 JPype:0.5.4.1 的Python:2.6

Java是在路徑和我做的apt-get安裝集結要領剛纔那麼有最新的GCC等

我不會糊所有的輸出,因爲它是巨大的。如此多的錯誤就像我錯過了Java或類似的安裝,但我沒有。打字java帶我進入上面的版本。這是開始:

運行安裝 運行建立運行build_py 運行build_ext 建設 '_jpype' 擴展 GCC -pthread -fno嚴格走樣-DNDEBUG -g -fwrapv -02 -Wall -Wstrict的原型 -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.6 -c src/native/common/jp_javaenv_autogen.cpp -o build/temp.linux-i686-2.6/src/native /common/jp_javaenv_autogen.o cc1plus:警告:命令行選項「-Wstrict的原型」是有效的阿達/ C/ObjC但不能用於C++ 在文件中包含從SRC /天然/普通/ jp_javaenv_auto gen.cpp:21: src/native/common/include/jpype.h:45:17:error:jni.h:沒有這樣的文件或目錄 從src/native/common/jp_javaenv_autogen.cpp包含的文件中:21 : src/native/common/include/jpype.h:77:error:ISO C++禁止聲明沒有類型的'jchar' src/native/common/include/jpype.h:77:error:expected','或之前 '...' '' 令牌 SRC /天然的/普通/包含/ jpype.h:82:錯誤:ISO C++禁止 'jchar' 的聲明無類型 SRC /天然的/普通/包含/ jpype。 H:82:錯誤:預期 ';' 前 '' 令牌 SRC /天然的/普通/包含/ jpype.h:86:錯誤:ISO C++禁止 'jchar' 的聲明無類型 SRC /天然/普通/ include/jpype.h:86:錯誤:預期 ';' 前 '&' 令牌 SRC /天然的/普通/包含/ jpype.h:88:錯誤:預期 ';' 之前 '私人' SRC /天然的/普通/包含/ jpype.h:89:錯誤:ISO C++禁止聲明沒有類型的'jchar' src/native/common/include/jpype.h:89:error:expected';''*'token 從src/native/common /包括/ jpype.h:96, 從SRC /天然的/普通/ jp_javaenv_autogen.cpp:21:

這是結束:

SRC /天然的/普通/包含/ jp_monitor.h:27:錯誤:'jobject'不命名類型 src /天然的/普通/ jp_javaenv_autogen.cpp:30:錯誤: 'jbyte' 沒有指定類型 SRC /天然的/普通/ jp_javaenv_autogen.cpp:38:錯誤: 'jbyte' 沒有指定類型 SRC /天然/普通/ jp_javaenv_autogen.cpp:45:error:變量或字段'SetStaticByteField'聲明爲void src/native/common/jp_javaenv_autogen.cpp:45:error:'jclass'未在此範圍內聲明 src/native/common/jp_javaenv_autogen.cpp :45:error:'jfieldID'未在此範圍內聲明 src/native/common/jp_javaenv_autogen.cpp:45:錯誤:'jbyte'未在此範圍內聲明 錯誤:命令'gcc'失敗,退出狀態爲1

回答

1
gcc: /EHsc: No such file or directory error: command 'gcc' failed with exit status 1 

EHsc是特定於Microsoft工具鏈的編譯器開關。這就是你得到這個錯誤的原因。你在某處混合工具鏈,不知何故 - 也許是以前嘗試的剩餘文件?我將不得不親自下載JPype來驗證使用mingw32進行構建。

你知道你可以下載Python 2.6和Pytho 2.5的JPype二進制發行版嗎?

至於你的* NIX構建,你缺少Java/JNI開發頭文件,所以C的Java類型不可用,編譯器無法識別它們。安裝dev軟件包並確保你的工具鏈能夠找到它們。

1

編輯Setup.py並刪除/ EHsc選項。

3

我在Linux上有同樣的錯誤。它的工作對我來說只是執行

看setup.py線45
export JAVA_HOME=/usr/lib/[*your_java_folder*] 

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