jni的学习使用

这里是java引用c/c++本地库文件

1,首先新建java源文件

public class testdll
{
static{System.loadLibrary("testdll"); //testdll是最后编译的库文件名
}public native static int get(); //c/c++要是先的方法
public native static void set(int i);
public static void main(String[] args)
{
testdll test = new testdll();
test.set(10);
System.out.println(test.get());
}
}

2,javac 编译此文件

3,javah testdll编译头文件,里面的内容什么意思可以查看其它资料

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

#ifndef _Included_testdll
#define _Included_testdll
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: testdll
* Method: get
* Signature: ()I
*/
JNIEXPORT jint JNICALL _Java_testdll_get
(JNIEnv *, jclass);

/*
* Class: testdll
* Method: set
* Signature: (I)V
*/
JNIEXPORT void JNICALL _Java_testdll_set
(JNIEnv *, jclass, jint);

#ifdef __cplusplus
}
#endif
#endif

4,编写c/c++源文件

#include"testdll.h"
int i = 0;
JNIEXPORT jint JNICALL _Java_testdll_get (JNIEnv *, jclass)
{
return i;
}
JNIEXPORT void JNICALL _Java_testdll_set (JNIEnv *, jclass, jint j)
{
i = j;
}

5,通过以下命令编译c/c++文件,并编译成库文件

gcc -c -fPIC -I c:\java\include -I c:\java\include\win32 testdll.cpp             / /编译成.o文件

gcc -shared -fPIC -o testdll.dll    testdll.o

6,最后java testdll得到结果 --》》》》10


不知道为什么在c/c++头文件及方法里面的函数java前如果没有加下划线,就会运行java是报错java.lang.UnsatisfiedLinkError,加了下划线不会报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值