1. Java代码
package com.github.manxisuo;
public class TestJNI
{
static
{
System.loadLibrary("Hello");
}
public static native int get();
public static native void set(int i);
public static void main(String[] args)
{
set(10);
int r = get();
System.out.println("The result is " + r);
}
}
2. 生成头文件
javah -jni com.github.manxisuo.TestJNI
将会生成com_github_manxisuo_TestJNI.h文件。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_github_manxisuo_TestJNI */
#ifndef _Included_com_github_manxisuo_TestJNI
#define _Included_com_github_manxisuo_TestJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_github_manxisuo_TestJNI
* Method: get
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_com_github_manxisuo_TestJNI_get
(JNIEnv *, jclass);
/*
* Class: com_github_manxisuo_TestJNI
* Method: set
* Signature: (I)V
*/
JNIEXPORT void JNICALL Java_com_github_manxisuo_TestJNI_set
(JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif
3. C/C++代码
TestJNI.cpp文件:
#include <jni.h>
#include "com_github_manxisuo_TestJNI.h"
int i = 0;
JNIEXPORT jint JNICALL Java_com_github_manxisuo_TestJNI_get (JNIEnv *, jclass)
{
return i;
}
JNIEXPORT void JNICALL Java_com_github_manxisuo_TestJNI_set (JNIEnv *, jclass, jint j)
{
i = j;
}
4. 编译成动态链接库
gcc -fPIC -shared -I/usr/local/jdk1.7.0_01/include -I/usr/local/jdk1.7.0_01/include/linux libHello.cpp -o libHello.so
注意:在linux下,在查找库文件时,会在库名称前加上lib前缀。因此,库名称为Hello时,库文件的名称应该是libHello。
5. 运行Java代码
结果如下:
The result is 10