【问题标题】:NDK javah fails : class file has wrong version 50.0, should be 49.0NDK javah 失败:类文件的版本错误 50.0,应该是 49.0
【发布时间】:2013-03-24 00:34:14
【问题描述】:

我查看了有关 javah 失败的各种帖子,但我没有发现任何与此错误有关的内容:

error: cannot access com.acme.ndktest.Sample
bad class file: bin/classes/com/acme/ndktest/Sample.class
class file has wrong version 50.0, should be 49.0
Please remove or make sure it appears in the correct subdirectory of the classpath.
com.sun.tools.javac.util.Abort
    at com.sun.tools.javac.comp.Check.completionError(Check.java:169)
    at com.sun.tools.javadoc.DocEnv.loadClass(DocEnv.java:149)

我在互联网上能找到的最接近的信息是这个 http://yonghoon.wikidot.com/ndk#toc4

JVM 的每个新版本都会增加类的版本号 文件。下面的列表显示了我知道的类版本号 Java 6:版本 50.0 Java 5 (1.5):版本 49.0 Java 1.4.2:版本 48.0

我不明白我使用的是 1.6,Eclipse 设置为 JDK 合规性 1.6, 我从 /usr/lib/jvm/java-6-sun/jdk1.6.0_31/bin/javah 文件夹运行 javah。

/usr/lib/jvm/java-6-sun/jdk1.6.0_31/bin/javah -classpath bin/classes -jni com.acme.ndktest.Sample

当我使用 1.6 时,我不确定为什么它说应该是 49。

更多信息 javac-版本-> javac 1.6.0_31 javap -v -classpath bin/classes com.acme.ndktest.Sample | grep 版本 次要版本:0,主要版本:50

在 /etc/alternatives 中,大多数 java 项都指向 java-6-sun,如 java 和 javac 但是javaws指向java-6-openjdk-amd64

我正在运行 Eclipse 3.7 Ant也与构建这些标头有任何关系

【问题讨论】:

  • /usr/lib/jvm/java-6-sun/jdk1.6.0_31/bin/javah -version 输出什么?你确定 NDK 支持 Java 6?
  • javah 版本“1.6.0_31”
  • javac -version 的输出是什么(没有附加完整路径)?在我看来,java工具链并不一致。要检查您的类文件的版本,您可以运行javap -v -classpath bin/classes com.acme.ndktest.Sample | grep version。在 Linux 上,您可能需要检查 /etc/alternatives 链接。
  • javac-版本-> javac 1.6.0_31 | javap -v -classpath bin/classes com.acme.ndktest.Sample | grep version 次要版本:0,主要版本:50 在替代方案中,大多数 java 项目都指向 java-6-sun,如 java 和 javac 但是 javaws 指向 java-6-openjdk-amd64java-6-openjdk-amd64 我正在运行 Eclipse 3.7 Ant也与构建这些标头有任何关系

标签: android eclipse android-ndk javah


【解决方案1】:

问题是某些软件包已安装到 /usr/java/packages/lib/ext 由另一个应用程序。

javac 使用这些来确定要使用的最大可能 jdk 版本。 所以这样做会失败

javac SomeFile.java -target 1.6 

给出此错误消息Javac 1.6 版无法为目标 1.6 构建

当您使用详细选项运行它时 javac -verbose -version SomeFile.java

它会列出 /usr/java/packages/lib/ext 中的所有文件

将所有文件移出 /usr/java/packages/lib/ext

它编译得很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 2014-03-31
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    相关资源
    最近更新 更多