0

我查看了有关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)

我在 Internet 上能找到的最接近的信息是 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 -version -> 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 是否与构建这些标头有任何关系

4

1 回答 1

0

问题是某些软件包已被另一个应用程序安装到 /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

它编译得很好。

于 2013-08-07T10:26:09.560 回答