您的位置:首页 > 编程语言 > C语言/C++

使用Javah 生成C/C++头文件的误区

2012-11-12 19:45 323 查看
原文出处:http://www.cnblogs.com/charley_yang/archive/2011/03/13/1983038.html

使用java 执行某个类也有相似的问题!可以先cd 到class文件包名的根所在的文件夹 再java package_name.class_name 

   使用Javah 可以获取您的 Java 源文件并生成 C/C++头文件,其中包含您的 Java 代码中所有本地方法(native方法)的 JNI 存根(stub,C头文件)。如果您正在生成一个类的 JNI 存根,而且您已经把这个类定义为包的一部分,那么您 必须指定完全限定的类名。
下面举例说明:
使用eclipse建立一个工程假设工程路径为$ProjectPath,并且你已经定义了一个类,并且带包名:cn.com.comit.jni
----------------------------

?
----------------------------
eclipse会自动帮你编译出一个字节码文件HelloJni.class,路径是$ProjectPath\bin\cn\com\comit\jni,很可能你会先cd到.class的目录这么做:
>cd $ProjectPath\bin\cn\com\comit\jni
>$ProjectPath\bin javah HelloJni
发现执行出错:
错误:无法访问 HelloJni

错误的类文件: .\HelloJni.class

类文件包含错误的类: cn.com.comit.jni.HelloJni

请删除该文件或确保该文件位于正确的类路径子目录中。
看来是路径有问题咯。那改成
javah cn.com.comit.jni.HelloJni
再次运行,发现还是错误:
错误:无法访问 cn.com.comit.jni.HelloJni

未找到 cn.com.comit.jni.HelloJni 的类文件

javadoc: 错误 - 找不到类 cn.com.comit.jni.HelloJni。
 
怎么才能解决这个问题呢?其实只要cd到包的上一级目录(我们这里是$ProjectPath\bin)在运行下面的命令就搞定了:
javah -classpath . cn.com.comit.jni.HelloJni
看一下生成的C头文件:

?
?
?
?
微软企业开发技术 | 移动开发(Google Android、Windows Mobile)技术| 嵌入式系统设计与开发 | JAVA开发

分类: Java JNI

绿色通道: 好文要顶 关注我 收藏该文与我联系 





charley_yang
关注 - 1
粉丝 - 64

+加关注

0

0

(请您对文章做出评价)

« 博主前一篇:Java
JNI 进阶
» 博主后一篇:C++项目中的extern
"C" {}

Feedback

#1楼   

2011-10-07 23:02 by feiyunruyue  

谢谢楼主,我的解决了
支持(0)反对(0)

#2楼   

2011-11-02 15:24 by freedragon  

javah -classpath . com.ura.test.JNItestActivity

在项目bin目录下执行,javah -classpath . 包.class文件名

解决了实际问题,真好,O(∩_∩)O谢谢。
支持(0)反对(0)

#3楼   

2012-05-28 13:43 by lugesot  

谢谢lz,我也搞了很久才搞定。

再总结下。

1 是在包的上一层运行,不是bin的下面。例如,我开发android,包打在bin\classes下,那么你就要在classes下javah;”classes”为什么多出来,我也不知道。

2 class名前的“ . "非常重要,它应该代表当前路径查询。注意,它和”cn.com.comit.jni.HelloJni“之间有空格。
支持(1)反对(0)

#4楼   

2012-07-25 15:26 by 刘博平  

绝大多数人都没提到这点,问题困扰了我很久

shit! Java!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: