前言
本文主要介绍了如何在Linux环境下进行JNI的开发。
正文
BIU_JNI. java
package com.biu.demo;
public class BIU_JNI {
static {
System.out.println("BIU_JNI so load start");
System.loadLibrary("BIU_JNI");
System.out.println("BIU_JNI so load success");
}
public static native int sum(int a, int b);
}
TestJni.java
package com.biu.demo;
import com.biu.demo.BIU_JNI;
public class TestJni {
public static void main(String[] args) {
int res = BIU_JNI.sum(2000,20);
System.out.println("res:"+res);
return;
}
}
在Linux下输入命令:javac -d . com/biu/demo/*.java
在Linux下输入命令:jar -cvf TestJni.jar com/biu/demo/
在Linux下输入命令:javah -jni -classpath TestJni.jar com.biu.demo.BIU_JNI
生成的com_biu_demo_BIU_JNI.h头文件如下
/* DO NOT EDIT THIS FILE - it is machine generated */# include <jni.h>
/* Header for class com_biu_demo_BIU_JNI */
#ifndef _Included_com_biu_demo_BIU_JNI
#define _Included_com_biu_demo_BIU_JNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_biu_demo_BIU_JNI
* Method: sum
* Signature: (II)I
*/JNIEXPORT jint JNICALL Java_com_biu_demo_BIU_1JNI_sum
(JNIEnv *, jclass, jint, jint);
#ifdef __cplusplus
}
#endif
#endif
编写对应 源文件 内容
#include "com_biu_demo_BIU_JNI.h"
/*
* Class: com_biu_demo_BIU_JNI
* Method: sum
* Signature: (II)I
*/JNIEXPORT jint JNICALL Java_com_biu_demo_BIU_1JNI_sum
(JNIEnv*, jclass, jint A, jint B)
{
return (A + B);
}
编译过程中报如下找不到”jni.h”的错误
需要到Linux编译服务器找到jdk/include目录下的”jni.h”与”jni_md.h”,加入到程序中一起编译。
编译so包OK
将jar包与so库文件放到同一目录下,
在Linux下输入命令:java -classpath TestJni.jar com.biu.demo.TestJni
运行报错,输入如下命令设置库文件路径:export LD_LIBRARY_PATH=./
再次运行,运行成功。
本文完。