首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

javah实施class文件失败原因调查

2012-09-22 
javah执行class文件失败原因调查在练习使用JNI的过程中,发现使用javah工具执行class总是失败,提示信息是:?

javah执行class文件失败原因调查

在练习使用JNI的过程中,发现使用javah工具执行class总是失败,提示信息是:

?

dr@drBox:~/Desktop/javach$ javah JniTesterror: cannot access JniTestbad class file: ./JniTest.classclass file contains wrong class: dingran.jni.test.JniTestPlease remove or make sure it appears in the correct subdirectory of the classpath.com.sun.tools.javac.util.Abortat com.sun.tools.javac.comp.Check.completionError(Check.java:164)at com.sun.tools.javadoc.DocEnv.loadClass(DocEnv.java:149)at com.sun.tools.javadoc.RootDocImpl.<init>(RootDocImpl.java:77)at com.sun.tools.javadoc.JavadocTool.getRootDocImpl(JavadocTool.java:159)at com.sun.tools.javadoc.Start.parseAndExecute(Start.java:330)at com.sun.tools.javadoc.Start.begin(Start.java:128)at com.sun.tools.javadoc.Main.execute(Main.java:66)at com.sun.tools.javah.Main.main(Main.java:147)javadoc: error - fatal error2 errors

?说是找不到文件,可是这个class文件明明在这呢,猜想可能是格式有问题,无法识别。

?

? 那么我看了用javac工具执行的JniTest.java文件,修改后成功了,发现是因为

?

? 不能有package;这句话,是这个导致了执行出的class文件不能识别。

?

? 具体过程如下:

?

? 1.新建JniTest.java文件,里面有执行jni的方法。

?

? 2.

dr@drBox:~/Desktop/javach$ javac JniTest.java dr@drBox:~/Desktop/javach$ lsJniTest.class  JniTest.java  JniTest.java~dr@drBox:~/Desktop/javach$ javah JniTestdr@drBox:~/Desktop/javach$ lsJniTest.class  JniTest.h  JniTest.java  JniTest.java~
?

3.这个JniTest.h文件就是我们要的了,ok,成功了。

?

?

?

补充,20120316

?

上面的方式容易带来问题,不建议把文件拷贝出来弄。

?

这样生成的头文件的函数名称没有包含java文件的包名,还得人工添加。

?

方法是:

?

用javah生成.h头文件

对于安卓工程而言:

1.首先进入bin目录里。

2.执行命令:

  javah -classpath classes -jni com.eoeandroid.ndk.Jnitest
  解释:classes是个目录,里面是eclipse编译生成的class文件,后面的com...是包名路径下面对应的class文件的名字。


3.生成的.h头文件在根目录下。

注意:如果是单拿出这个.java文件用javac生成class文件,然后再用javah生成.h头文件的话,做法比较麻烦,

还得做很多处理,最后使用起来.h里面的函数名称还不包含我们的包名,需手工添加。所以这种方式不可行,剧麻烦。

热点排行