首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于生成Java包装器的jnaerator的SimpleMeaningfulExample不能工作

用于生成Java包装器的jnaerator的SimpleMeaningfulExample不能工作
EN

Stack Overflow用户
提问于 2009-11-21 01:41:29
回答 1查看 1.8K关注 0票数 2

我尝试了jnaerator SimpleMeaningfulExample (http://code.google.com/p/jnaerator/wiki/SimpleMeaningfulExample),得到了:

代码语言:javascript
复制
$ 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上都运行着Java 1.5.0_20。

我切换到Mac上的1.6.0_15,然后再试一次,得到:

代码语言:javascript
复制
$ 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)

我做错了什么吗?

更新:I向users@jna.dev.java.net发布了我的问题(参见这个帖子:https://jna.dev.java.net/servlets/BrowseList?list=users&by=thread&from=2312620),并收到了JNAerator项目所有者奥利维尔·查菲克的回复。概括地说:

  • 我在JNAerator中发现了一个回归
  • 他上传了一个固定的快照构建:http://jnaerator.sourceforge.net/maven/com/jnaerator/jnaerator/0.9.3-SNAPSHOT/
  • 该构建运行得更好,但没有生成TestLibrary.java
  • 我提交了一份错误报告:http://code.google.com/p/jnaerator/issues/detail?id=50

更新2: Olivier 再作回应在认识到缺少TestLibrary.java后并不是一个bug,因为它默认情况下嵌入到生成的Test.jar文件中。

EN

回答 1

Stack Overflow用户

发布于 2009-11-21 01:54:53

好吧,你已经自己解决了问题。版本问题。

消息告诉您,您的JRE不知道如何执行jar中的类,因为jar中的类具有比JRE本身更新的版本。

jar文件可能是用java1.6.x编译的。因此,当您尝试执行它时,JRE会抱怨UnsupportedClassVersionError: Bad version number,因为JRE的版本低于JDK的版本,后者是用它编译的源代码。JRE 1.5无法读取jar中类的更新类文件版本。

当您切换到Java时,编译jar文件的JDK的主要Java版本和用于运行jar的JRE版本是相同的(1.6.x),并且运行良好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1774215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档