热门关键字:
jquery > jquery教程 > java > 使用Javah 生成C/C++头文件

使用Javah 生成C/C++头文件

307
作者:管理员
发布时间:2020/4/20 14:40:08
评论数:0
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=1378

使用Javah 可以获取您的 Java 源文件并生成 C/C++头文件,其中包含您的 Java 代码中所有本地方法(native方法)的 JNI 存根(stub,C头文件)。如果您正在生成一个类的 JNI 存根,而且您已经把这个类定义为包的一部分,那么您 必须指定完全限定的类名。

下面举例说明:

使用eclipse建立一个工程假设工程路径为$ProjectPath,并且你已经定义了一个类,并且带包名:cn.com.comit.jni

 

 1 package cn.com.comit.jni;  2  3 public class HelloJni {  4  5 public native void displayHelloJni();  6 static{  7 System.loadLibrary("");  8  }  9 10 /** 11  * @param args 12 */ 13 public static void main(String[] args) { 14 // TODO Auto-generated method stub 15 new HelloJni().displayHelloJni(); 16  } 17 18 }

 

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头文件:

 

 1 /* DO NOT EDIT THIS FILE - it is machine generated */  2 #include <jni.h>  3 /* Header for class cn_com_comit_jni_HelloJni */  4  5 //避免重复包含头文件  6  7 #ifndef _Included_cn_com_comit_jni_HelloJni  8 #define _Included_cn_com_comit_jni_HelloJni  9 10 //c++编译环境中才会定义__cplusplus (plus就是"+"的意思 11 12 #ifdef __cplusplus 13 extern "C" {  //告诉编译器下面的函数是c语言函数(因为c++和c语言对函数的编译转换不一样,主要是c++中存在重载) 14 #endif 15 /*
16  * Class:     cn_com_comit_jni_HelloJni
17  * Method:    displayHelloJni
18  * Signature: ()V
19  */ 20 JNIEXPORT void JNICALL Java_cn_com_comit_jni_HelloJni_displayHelloJni 21  (JNIEnv *, jobject); 22 23 #ifdef __cplusplus 24 } 25 #endif 26 #endif

 

 备注:注意路径和空格的问题!

 转载学习自:https://www.cnblogs.com/charley_yang/archive/2011/03/13/1983038.html!





如果您觉得本文的内容对您的学习有所帮助:支付鼓励



关键字:C/C++头文件
友荐云推荐