Ошибка NDK javah: файл класса имеет неправильную версию 50.0, должна быть 49.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)

Самая близкая информация, которую я смог найти в Интернете, это 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, я запускаю javah из папки /usr/lib/jvm/java-6-sun/jdk1.6.0_31/bin/javah.

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

Я не уверен, почему он говорит, что должно быть 49, когда я использую 1,6.

Дополнительная информация 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 имеет какое-либо отношение к созданию этих заголовков.


person pt123    schedule 24.03.2013    source источник
comment
Что выводит /usr/lib/jvm/java-6-sun/jdk1.6.0_31/bin/javah -version? Вы уверены, что NDK поддерживает Java 6?   -  person nitind    schedule 24.03.2013
comment
Java версии 1.6.0_31   -  person pt123    schedule 24.03.2013
comment
Каков результат javac -version (без полного пути)? Мне кажется, что цепочка инструментов java несовместима. Чтобы проверить версии ваших файлов классов, вы можете запустить javap -v -classpath bin/classes com.acme.ndktest.Sample | grep version. В Linux вы можете проверить /etc/alternatives ссылки.   -  person j.holetzeck    schedule 24.03.2013
comment
javac -версия -> javac 1.6.0_31 | javap -v -classpath bin/classes com.acme.ndktest.Sample | версия grep младшая версия: 0, основная версия: 50 В качестве альтернативы большинство элементов java указывают на java-6-sun, например java и javac. Но javaws указывает на java-6-openjdk-amd64java-6-openjdk-amd64. Также Ant имеет какое-либо отношение к созданию этих заголовков   -  person pt123    schedule 24.03.2013


Ответы (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

Он компилируется нормально.

person pt123    schedule 07.08.2013