使用Javah 可以获取您的 Java 源文件并生成
C/C++头文件,其中包含您的 Java 代码中所有本地方法(native方法)的 JNI 存根(stub,C头文件)。如果您正在生成一个类的
JNI 存根,而且您已经把这个类定义为包的一部分,那么您 必须指定完全限定的类名。
下面举例说明:
使用eclipse建立一个工程假设工程路径为$ProjectPath,并且你已经定义了一个类,并且带包名:cn.com.comit.jni
----------------------------
package cn.com.comit.jni;
public class HelloJni {
public native void displayHelloJni();
static{
System.loadLibrary("");
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new HelloJni().displayHelloJni();
}
}
----------------------------
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头文件:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class cn_com_comit_jni_HelloJni */
//避免重复包含头文件
#ifndef _Included_cn_com_comit_jni_HelloJni
#define _Included_cn_com_comit_jni_HelloJni
//c++编译环境中才会定义__cplusplus (plus就是"+"的意思
#ifdef __cplusplus
extern "C" { //告诉编译器下面的函数是c语言函数(因为c++和c语言对函数的编译转换不一样,主要是c++中存在重载)
#endif
/*
* Class: cn_com_comit_jni_HelloJni
* Method: displayHelloJni
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_cn_com_comit_jni_HelloJni_displayHelloJni
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
分享到:
相关推荐
javah命令生成的后缀是.h的c语言的头文件,
JNI开发之javah生成静态和非静态的两个头文件区别
三、 编写 C/C++ 代码 13 四、 运行exe 18 IV. Java JNI 编程进阶 18 一、 解决性能问题 18 二、 解决本机平台接口调用问题 19 三、 嵌入式开发应用(JNI小例子) 20 1、 新增一个基础类 22 2、 定义新类继承基础类 23...
jni-headers-maven-plugin.zip,用于生成从Java调用的本地函数的C/C++头文件的Maven插件(使用Javah)
用javah导出类的头文件常见的错误及正确的使用方法.docx
ndk开发者对于javah和javap必用的,是否无法获取到签名,是否无法根据java代码生成c/c++中的头文件呢,那么就下载这个能指导你倒争取的方向
·编写带有native声明的方法的java类 ·使用javac命令编译所编写的java类 ·使用javah ?jni java类名生成扩展名为h的头文件 ...·使用C/C++实现本地方法 ·将C/C++编写的文件生成动态连接库 ·ok
1、下载ndk 2、编写jni的加载类 参考例子: public class JniTest { ...3、使用javah -jni生成.h文件 编写好jni加载类之后,就要开始生成.h文件了,此文件相当于一个声明文件,起到jni连接c++源
执行之后会生成一个com_example_jni_example_MainActivity.h 的C头文件; 4、将上面生成的头文件拷贝到jni目录下,并实现该头文件里面的函数;上面自动生成的头文件中不含有参数,需要自己补齐。 5、完善工程目录...
②编写c/c++文件,实现之前头文件中所定义的的函数。 ③编写Android.mk(自定义要编译的文件、标签等)和Application.mk(编译的架构)文件。 注意: ①编译之前要配置好NDK环境变量。 ②要在c文件中注册本地方法。
Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 Chap 3:javah命令帮助信息......Chap 4:用javah产生一个...Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能... 47 Chap9:如何编写jni方法(转载)... 55
利用JAVAH生成C++的JNI类,使用JAR打包生成可执行包
使用 javah 工具生成 C++ 中需要实现的 Native 方法 ( 仅做参考 ) X . 总结 ———————————————— 版权声明:本文为CSDN博主「韩曙亮」的原创文章,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文...
实例1: 1)使用javah 生成.h文件 2)根据.h文件,编写.cpp源程序。 实例2: 1)演示了java调用c++,以及c++调用java。 2)java 与 c++ 间,通过复杂数据类型(Vector)作为参数来传递数据。
Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能... 47 Chap9:如何编写jni方法(转载)... 55 1、实例一:在jni中调用标准c中自带的函数printf(): 57 2、实例二、调用c 语言用户定义的函数... 58 ...
从 https://nodeload.github.com/jasonsantos/luajava/zipball/master 下载的 luajava 中是没有 luajava.h 文件的 该文件需要由 JDK 的 javah 生成 在此希望能帮到一些生成luajava.h因难的人 :)
使用Java的FileDescriptor来操作...②使用javac将.java编译成.class文件,然后使用javah编译相应的头文件 ③实现相关的.c/.cpp文件(实现头文件中定义的函数) ④编写Android.mk和Aplication.mk文件 ⑤利用ndk编译so库。
ewrwrtwtwetwetwtwtwetwetwfdsfsdfs ydrrydghdfhd[ fsddgsdg
4. 利用命令生成相应的头文件,在根目录下执行:javah -classpath bin/classes -d jni com.xxx.hello.HelloJni ————————————— ——————— ^ ^ 包名 类名 5. 编写相应的.c文件(hello-jni.c) #...
使用javah生成C ++头 cd projectPath / app / src / main javah -d jni -cp pathTo / Library / Android / sdk / platforms / android-22 / android.jar:../../ build / intermediates / classes /