15、Jni介绍
来源:互联网 发布:极速格斗网络电影 编辑:程序博客网 时间:2024/05/19 23:03
举例说明:
1、java程序清单:
package cn;
public class HelloWorld {
/**
* @param args
*/
static {
System.loadLibrary("hello");
}
public native void DisplayHello();
public static void main(String[] args) {
// TODO Auto-generated method stub
new HelloWorld().DisplayHello();
}
}
2、javac ./cn/HelloWorld.java 编译源文件 ,生成相应的字节码文件HelloWorld.class
3、使用javah生成头文件
javah -jni cn.HelloWorld 为本地方法生成HelloWorld.h文件(在当前目录下生成)
内容:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class cn_HelloWorld */
#ifndef _Included_cn_HelloWorld
#define _Included_cn_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: cn_HelloWorld
* Method: DisplayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_cn_HelloWorld_DisplayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
注:1)、此头文件是不需要用户编译的,直接供其它C、C++程序引用。
2)、此头文件中的Java_cn_HelloWorld_DisplayHello(JNIEnv *, jobject)方法,是将来与动态链接库交互的接口。
4、vi MyHelloWorldImp.c 编写C语言实现 java_cn_HelloWorld_DisplayHello()方法
#include <jni.h>
#include "cn_HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_cn_HelloWorld_DisplayHello
(JNIEnv *env, jobject obj)
{
printf("**From MyHelloWorldImpl.c :");
printf("Hello world ! \n");
return;
}
5、生成动态库
gcc -I/usr/jdk1.5.0_21/include/ -I/usr/jdk1.5.0_21/include/linux/ MyHelloWorldImp.c -o libhello.so -shared -fPIC
在当前目录下生成动态链接库libhello.so文件:
6、有了具体实现的动态库后,就可以运行JAVA调用JNI程序类的native方法.
java -Djava.library.path=. cn.HelloWorld
结果:
- 15、Jni介绍
- jni介绍
- JNI介绍
- JNI介绍
- JNI介绍
- JNI介绍
- JNI介绍
- JNI介绍
- JNI介绍
- JNI介绍
- JNI入门介绍 (ZT)
- JNI入门介绍
- 【转】JNI入门介绍
- JNI简要介绍
- JNI入门介绍
- JNI入门介绍
- Android JNI介绍
- JNI入门介绍下
- 重温大师经典:Martin Fowler 的持续集成
- 蓝桥(十) 加密串
- 类型安全枚举
- Fedora 下安装codeblocks
- gcc/g++参数详解
- 15、Jni介绍
- LPC17xx Uart0,Uart1,Uart2,Uart3的区别
- Windows系统资源不足的七种处理方法
- Window下怎么运行Perl程序
- spring集成使用jdbc的问题
- AppCan:如何在Android手机上开发出Android应用
- 构建WDK驱动出现fatal error U1087: cannot have : and :: dependents for same target
- 影子clone,深度clone
- 播放器的一些基础知识