【问题标题】:JPype compile problemsJPype 编译问题
【发布时间】:2011-04-08 15:40:51
【问题描述】:

我正在与 JPype 做一个正确的旧噩梦。我在 Windows 上安装了我的开发环境,因此尝试在那里安装它,但没有成功。然后我尝试了 Ubunto 也没有运气。我现在有点绝望了。我正在使用 Mingw32,因为我尝试安装 VS2008,但它告诉我必须安装 XP SP2,但我在 Vista 上。我尝试了 VS2010 但没有运气,我得到了“错误:无法找到 vcvarsall.bat”错误。不管怎样,我现在在 Mingw32 上

最终我正在尝试使用 Neo4j 和 Python,因此我需要使用 JPype。我在网上找到了很多关于 MySQL 等问题的参考资料,但它们对 JPype 没有帮助。

如果我可以修复 unix 或 windows,我可以开始工作,因此我们将不胜感激。

这是版本..

Windows:Vista 64 蟒蛇:2.6 编译器 Mingw32:最新版本 Jpype:0.5.4.1 爪哇资料: java版本“1.6.0_13” Java(TM) SE 运行时环境 (build 1.6.0_13-b03) Java HotSpot(TM) 64 位服务器 VM(内部版本 11.3-b02,混合模式)

我跑:

python setup.py install --compiler=wingw32

并得到以下输出。

选择 Windows 配置文件 运行安装 运行构建 运行 build_py 运行 build_ext 构建“_jpype”扩展 C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall -DWIN32=1 "-IC:\Program Files (x86)\Java\jdk1.6.0_21/include" "-IC:\Program文件 (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&)'中: src/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:警告:不推荐从字符串常量到“char *”的转换 gcc: /EHsc: 没有这样的文件或目录 错误:命令“gcc”失败,退出状态为 1

所以在unix Ubunto上问题如下:

Java 版本:1.6.0_18 类型:0.5.4.1 蟒蛇:2.6

Java 在路径中,我刚刚做了 apt-get install build-essentials 所以有最新的 GCC 等。

我不会粘贴所有输出,因为它很大。如此多的错误,就像我错过了 Java 或类似的安装,但我没有。输入 java 带我进入上面的版本。这是开始:

运行安装 运行构建 运行 build_py 运行 build_ext 构建“_jpype”扩展 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.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-prototypes”对 Ada/C/ObjC 有效,但对 C++ 无效 在 src/native/common/jp_javaenv_autogen.cpp:21 包含的文件中: src/native/common/include/jpype.h:45:17: 错误: jni.h: 没有这样的文件或目录 在 src/native/common/jp_javaenv_autogen.cpp:21 包含的文件中: src/native/common/include/jpype.h:77:错误:ISO C++ 禁止声明没有类型的“jchar” src/native/common/include/jpype.h:77:错误:在“”标记之前需要“,”或“...” src/native/common/include/jpype.h:82:错误:ISO C++ 禁止声明没有类型的“jchar” src/native/common/include/jpype.h:82: 错误:在“”标记之前需要“;” src/native/common/include/jpype.h:86:错误:ISO C++ 禁止声明没有类型的“jchar” src/native/common/include/jpype.h:86: 错误: 预期的';' 在'&' 标记之前 src/native/common/include/jpype.h:88: 错误: 预期的‘;’在‘私人’之前 src/native/common/include/jpype.h:89:错误:ISO C++ 禁止声明没有类型的“jchar” src/native/common/include/jpype.h:89: 错误: 预期的';' 在'*' 标记之前 在 src/native/common/include/jpype.h:96 包含的文件中, 来自 src/native/common/jp_javaenv_autogen.cpp:21:

这就是结局:

src/native/common/include/jp_monitor.h:27:错误:“jobject”没有命名类型 src/native/common/jp_javaenv_autogen.cpp:30:错误:“jbyte”没有命名类型 src/native/common/jp_javaenv_autogen.cpp:38:错误:‘jbyte’没有命名类型 src/native/common/jp_javaenv_autogen.cpp:45:错误:变量或字段“SetStaticByteField”声明为无效 src/native/common/jp_javaenv_autogen.cpp:45:错误:“jclass”未在此范围内声明 src/native/common/jp_javaenv_autogen.cpp:45:错误:“jfieldID”未在此范围内声明 src/native/common/jp_javaenv_autogen.cpp:45:错误:“jbyte”未在此范围内声明 错误:命令“gcc”失败,退出状态为 1

【问题讨论】:

    标签: java python


    【解决方案1】:

    我在 Linux 上遇到了同样的错误。它对我来说只是执行

    export JAVA_HOME=/usr/lib/[*your_java_folder*]
    

    查看 setup.py 第 45 行:

    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
    

    【讨论】:

      【解决方案2】:
      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 类型不可用,编译器无法识别它们。安装开发包并确保您的工具链能够找到它们。

      【讨论】:

        【解决方案3】:

        编辑 Setup.py 并删除 /EHsc 选项。

        【讨论】:

          猜你喜欢
          • 2013-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-26
          • 2020-04-03
          • 2010-10-04
          相关资源
          最近更新 更多