java JNI入门一

本文详细介绍了JNI(Java Native Interface)原理,通过实例展示了如何在Java中调用C/C++动态库,实现跨语言交互,特别适合寻求深入理解JNI及其应用的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA基础之理解JNI原理(转载+修改)

JNI是JAVA标准平台中的一个重要功能,它弥补了JAVA的与平台无关这一重大优点的不足,在JAVA实现跨平台的同时,也能与其它语言(如C、C++)的动态库进行交互,给其它语言发挥优势的机会。
有了JAVA标准平台的支持,使JNI模式更加易于实现和使用。在此总结了下面这个知识图:
环境说明:ubuntu 11.04

第一步:

程序1 src/com/magc/jni/HelloWorld.java



class HelloWorld
{
	private native void print();
	public static void main(String[] args)
	{
		new HelloWorld().print();
	}

	static
	{
		System.loadLibrary("Hello");//后来生成库时候,为此libHello.so
	}
}

编译HelloWorld.java

在命令行中运行如下命令:

javac HelloWorld.java

第二步:
生成HelloWorld.h

在命令行中运行如下命令:

javah -jni HelloWorld


在当前文件夹中会生成HelloWorld.h。打开HelloWorld.h将会发现如下代码:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloWorld
 * Method:    print
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloWorld_print  //Java_HelloWorld_print此函数为后来c文件中申明使用,要一致
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif


实现HelloWorld.c

创建HelloWorld.c文件输入如下的代码:

#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"

JNIEXPORT void JNICALL 

    Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
	printf("Hello World!\n");
}



第三步:
编译生成libHelloWorld.so

在Linux下执行如下命令来完成编译工作:

cc -I/usr/lib/jvm/java-6-sun/include/linux/
   -I/usr/lib/jvm/java-6-sun/include/
    -fPIC -shared -o libHello.so HelloWorld.c

(上面的命令为一行,不要直接复制,libHello.so 为java中System.loadLibrary("
Hello")的名称相对应


第四步骤
声明库地址
java -Djava.library.path='.' HelloWorld

编译成功

yy@yy:~/androd_jin/hellowrold/src$ java -Djava.library.path=. com.magc.jni.HelloWorld
From jni_helloworldImpl.cpp :Hello world !








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值