1.编写带有native声明的方法的java类
public class Hello
{
// java调用c实现的动态库方法时,需在java类中声明为 native
public native void display();
static
{
// 打印java引用库文件时会搜索的位置,目的是将c生成的动态库放到这
System.out.println(System.getProperty("java.library.path"));
// 加载库文件,注意库名一定要是 libxxx.so格式,此处xxx为hello
System.loadLibrary("hello");
}
public static void main(String[] args)
{
new Hello().display();
}
}
2. 编译Hello.java文件生成java.class
javac Hello.java
3. 为native声明的方法生成c样式的头文件,Hello.h
javah Hello
4. 用c实现该头文件中的函数 hello.c
#include <jni.h>
#include "Hello.h"
JNIEXPORT void JNICALL Java_Hello_display (JNIEnv *env, jobject obj)
{
printf("hello world!\n");
}
5. 编译hello.c生成动态库libhello.so
cc printHello.c -I/usr/java/jdk1.8.0_11/include/ -I/usr/java/jdk1.8.0_11/include/linux -shared -fPIC -o hello.so
注意: -I用于制定jni.h的位置及其引用的其他文件的位置
6. 将libhello.so放到 java.library.path 任意目录
sudo mv libhello.so /usr/lib
7. 运行调用c库的java程序
java Hello
效果如下: