创建java工程,这里我创建的是一个maven工程,java文件JniUtil:
package org.chenjun.jni;
public class JniUtil {
public native static int getSum(int a,int b);
static{
System.loadLibrary("jniUtil");
}
}
利用javah编译出头文件 org_chenjun_jni_JniUtil.h:
我在ecilpse里面创建了一个c动态链接库工程jniUtil,将头文件放到该工程下面,引入jdk的include和linux目录:
新建一个c文件jniUtil.c:
/* * javaCallC.c * * Created on: 2013年8月20日 * Author: chenjun */ #include <jni.h> #include <stdio.h> #include "org_chenjun_jni_JniUtil.h" JNIEXPORT jint JNICALL Java_org_chenjun_jni_JniUtil_getSum (JNIEnv *env, jclass clazz, jint a, jint b){ return a + b; }
编译jniUtil工程得到一个动态链接库文件libjniUtil.so:
将这个动态链接库文件放到java工程的resources目录下面,这个路径可以随便放的,只要能找到这个动态链接库就ok。
我建立了一个单元测试类:
package org.chenjun.jni;
import org.junit.Assert;
import org.junit.Test;
public class JniUtilTest {
@Test
public void testGetSum(){
int c = JniUtil.getSum(2, 5);
Assert.assertEquals(7, c);
}
}
要运行这个单元测试类,首先配置运行参数:
-Djava.library.path=${workspace_loc:/org.chenjun.jni/src/main/resources}
debug run ok。附件包含源码