`
dingran
  • 浏览: 372125 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • JNI
JNI 
阅读更多

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

 

dr@drBox:~/Desktop/javach$ javah JniTest
error: cannot access JniTest
bad class file: ./JniTest.class
class file contains wrong class: dingran.jni.test.JniTest
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: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 error
2 errors

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

 

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

 

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

 

  具体过程如下:

 

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

 

  2.

dr@drBox:~/Desktop/javach$ javac JniTest.java 
dr@drBox:~/Desktop/javach$ ls
JniTest.class  JniTest.java  JniTest.java~
dr@drBox:~/Desktop/javach$ javah JniTest
dr@drBox:~/Desktop/javach$ ls
JniTest.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里面的函数名称还不包含我们的包名,需手工添加。所以这种方式不可行,剧麻烦。

分享到:
评论

相关推荐

    javah h h h guu

    ewrwrtwtwetwetwtwtwetwetwfdsfsdfs ydrrydghdfhd[ fsddgsdg

    JavaH指数.doc

    JavaH指数.doc

    javah编译jni

    在Android Studio3.0上用javah方式编译jni,并解决新问题

    javah命令生成的头文件

    javah命令生成的后缀是.h的c语言的头文件,

    JNI开发之javah生成静态和非静态的两个头文件区别代码

    JNI开发之javah生成静态和非静态的两个头文件区别

    Android JNI实例

    ①编写Java文件,编译成class文件,利用javah将class文件生成头文件。 ②编写c/c++文件,实现之前头文件中所定义的的函数。 ③编写Android.mk(自定义要编译的文件、标签等)和Application.mk(编译的架构)文件。 ...

    JavaEE所需的配置文件(JDK,JRE)

    java – 运行编译后的java程序(.class后缀的) appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。 Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。 ...

    JNI生成文件

    放入到JDK的BIN目录中运行AxulRun文件即可。

    Eclipse 配置 Javah NDK 编译

    图片详细说明配置步骤,供9张截图

    JavaH5微信支付

    Java接入H5微信支付源码,详细教程—https://blog.csdn.net/happy_yk/article/details/84862727#_5

    jdk1.8版本的安装包

    没有JDK的话,无法编译Java程序(指java源码.java文件),如果想只运行Java程序(指class或jar或其它归档文件),要确保已安装相应的JRE。 版本:jdk1.8 适用于java开发的jar包 jdk1.8新特性 Java 8允许我们给接口...

    JNI之Hello-JNI进阶

    4. 利用命令生成相应的头文件,在根目录下执行:javah -classpath bin/classes -d jni com.xxx.hello.HelloJni ————————————— ——————— ^ ^ 包名 类名 5. 编写相应的.c文件(hello-jni.c) #...

    jdk-6u45-windows-i586 & x64

    java – 运行编译后的java程序(.class后缀的) appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。 Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。 Javap...

    jsp小示例显示日期

    java – 运行编译后的java程序(.class后缀的) appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。 Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。 Javap...

    javaweb+javah后端代码+芝麻开门博客网站后端代码

    可用于毕业设计,博客网站后端设计,javaweb+javah后端代码+芝麻开门博客网站后端代码

    Android 串口 文件描述符

    使用Java的FileDescriptor来操作...②使用javac将.java编译成.class文件,然后使用javah编译相应的头文件 ③实现相关的.c/.cpp文件(实现头文件中定义的函数) ④编写Android.mk和Aplication.mk文件 ⑤利用ndk编译so库。

    word源码java-jniwebshell:jniwebshel​​l

    由于jni技术需要先通过javah+.class文件生成.h开头的c头文件,jsp是一种特殊的class文件,而jsp经过Tomcat编译class文件,命名遵从test.jsp -&gt;&gt; org.apache.jsp.test_jsp.class,所以我们需要新建package为org....

    用javah导出类的头文件常见的错误及正确的使用方法.docx

    用javah导出类的头文件常见的错误及正确的使用方法.docx

    JDK命令学习 javac java javah jdb

    本人根据学习jdk命令 总结的一套jdk命令大全 日后还会有更新 请谅解编写仓促

    jni简单使用

    生成HelloWorld.class文件 有package时,输入命令: javac jnitest/HelloWorld.java 输入命令: javah -jni HelloWorld 生成HelloWorld.h文件(若提示找不到HelloWorld类文件,Java代码中不要写package) 有...

Global site tag (gtag.js) - Google Analytics