java通过jni调用c库

来源:互联网 发布:西门子200plc编程实例 编辑:程序博客网 时间:2024/06/11 17:39

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

效果如下:






0 0
原创粉丝点击