2

jnaerator SimpleMeaningfulExample(http://code.google.com/p/jnaerator/wiki/SimpleMeaningfulExample)を試してみました。

$ java -jar jnaerator-0.9.2.jar -library Test Test.h -o . -v
Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad
version number in .class file
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:675)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:316)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:280)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374)

…MacOSX10.5.8とUbuntu8.04の両方で、どちらもJava1.5.0_20を実行しています。

Mac OS Xで1.6.0_15に切り替えて、もう一度試してみました。

$ java -jar jnaerator-0.9.2.jar -library Test Test.h -o . -v
Auto-configuring parser...
Nov 20, 2009 5:12:43 PM com.ochafik.lang.jnaerator.JNAeratorConfigUtils getProp
INFO: [environment] JNAERATOR_INCLUDE_PATH=.:/usr/include
Nov 20, 2009 5:12:43 PM com.ochafik.lang.jnaerator.JNAeratorConfigUtils getProp
INFO: [environment] JNAERATOR_FRAMEWORKS_PATH=/System/Library/Frameworks/CoreServices.framework/Versions/Current/Frameworks:/System/Library/Frameworks/ApplicationServices.framework/Versions/Current/Frameworks:/System/Library/Frameworks:/Library/Frameworks:/Local/Library/Frameworks/:/Users/dspitzer/Library/Frameworks
os.arch = x86_64
Nov 20, 2009 5:12:43 PM com.ochafik.lang.jnaerator.JNAerator jnaerate
INFO: Include path : 
        .
        /usr/include
Parsing native headers...
Writing preprocessor output to '_jnaerator.preprocessed.c'
Writing preprocessor macros to '_jnaerator.macros.cpp'
line 0:-1 Failed to match any alternative with token [@-1,0:0='<no text>',<-1>,0:-1]
         File: null:0
        Input: 
         Rule: 1501:1: castExpr returns [Expression expr] : ( '(' tr= mutableTypeRef ')' inner= castExpr | e= unaryExpr );
        Stack: []

line 0:-1 Failed to match any alternative with token [@-1,0:0='<no text>',<-1>,0:-1]
         File: null:0
        Input: 
         Rule: 1501:1: castExpr returns [Expression expr] : ( '(' tr= mutableTypeRef ')' inner= castExpr | e= unaryExpr );
        Stack: []

line 0:-1 Failed to match any alternative with token [@-1,0:0='<no text>',<-1>,0:-1]
         File: null:0
        Input: 
         Rule: 1501:1: castExpr returns [Expression expr] : ( '(' tr= mutableTypeRef ')' inner= castExpr | e= unaryExpr );
        Stack: []

Now parsing 1 text blocks
Normalizing parsed code...
Generating libraries...
JNAeration failed !
java.lang.NullPointerException
        at com.ochafik.lang.jnaerator.TypeConversion.convertExpressionToJava(TypeConversion.java:1391)
        at com.ochafik.lang.jnaerator.TypeConversion.convertExpressionToJava(TypeConversion.java:1223)
        at com.ochafik.lang.jnaerator.DeclarationsConverter.convertVariablesDeclaration(DeclarationsConverter.java:1087)
        at com.ochafik.lang.jnaerator.DeclarationsConverter.convertVariablesDeclaration(DeclarationsConverter.java:1134)
        at com.ochafik.lang.jnaerator.DeclarationsConverter.convertStruct(DeclarationsConverter.java:873)
        at com.ochafik.lang.jnaerator.DeclarationsConverter.outputConvertedStruct(DeclarationsConverter.java:950)
        at com.ochafik.lang.jnaerator.DeclarationsConverter.convertStructs(DeclarationsConverter.java:1055)
        at com.ochafik.lang.jnaerator.JNAerator.generateLibraryFiles(JNAerator.java:1102)
        at com.ochafik.lang.jnaerator.JNAerator.jnaerationCore(JNAerator.java:1322)
        at com.ochafik.lang.jnaerator.JNAerator.jnaerate(JNAerator.java:700)
        at com.ochafik.lang.jnaerator.JNAerator$1.finished(JNAerator.java:613)
        at com.ochafik.lang.jnaerator.JNAeratorCommandLineArgs$ArgsParser.parse(JNAeratorCommandLineArgs.java:127)
        at com.ochafik.lang.jnaerator.JNAerator.main(JNAerator.java:256)

私は何か間違ったことをしていますか?

更新:users@jna.dev.java.netに質問を投稿し(このスレッドを参照:https ://jna.dev.java.net/servlets/BrowseList?list = users&by = thread&from = 2312620 )、Olivierから応答を受け取りましたJNAeratorプロジェクトの所有者であるChafik。要約する:

更新#2: TestLibrary.javaの欠如はバグではないことに気付いた後、Olivierは再度応答しました。これは、デフォルトで生成されたTest.jarファイルに埋め込まれているためです。

4

1 に答える 1

0

さて、あなたはすでに問題を自分で理解しています。バージョンの問題。

このメッセージは、jar 内のクラスのバージョンが JRE 自体よりも新しいため、JRE が jar 内のクラスを実行する方法を認識していないことを示しています。

jar ファイルは、おそらく Java 1.6.x でコンパイルされたものです。したがって、実行しようとすると、JREUnsupportedClassVersionError: Bad version numberのバージョンがソースがコンパイルされた JDK のバージョンよりも低いため、JRE は不平を言います。また、JRE 1.5 は、jar 内のクラスの新しいクラス ファイル バージョンを読み取ることができません。

Java 1.6.0_15 に切り替えたので、jar ファイルがコンパイルされた JDK の主要な Java バージョンと、jar を実行するために使用された JRE のバージョンは同一 (1.6.x) であり、正常に動作します。

于 2009-11-21T01:54:53.417 に答える