OSX上进行JNI开发的流程及命令


1. 声明native方法

HelloWorld.java

class HelloWorld {
    private native void print();
    public static void main(String[] args) {
        new HelloWorld().print(); 
    }
    static { 
        System.loadLibrary("HelloWorld");
    } 
}

2. 编译Java文件

$ javac HelloWorld.java
会生成HelloWorld.class文件。


3. 生成native方法的头文件

$ javah -jni HelloWorld
会生成HelloWorld.h文件。


4. 实现本地方法

HelloWorld.c

#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"

JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
    printf("Hello World!\n");
    return;
}


5. 编译生成动态库文件

在OSX下为jnilib文件。

$ gcc -I/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/include/ -I/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/include/darwin/ -c HelloWorld.c
$ gcc -dynamiclib -o libHelloWorld.jnilib HelloWorld.o
会生成HelloWorld.o和libHelloWorld.jnilib文件。


6. 执行

$ java -Djava.library.path=. HelloWorld
HelloWorld!

7. 参考:

Windows、Linux、Mac OSX编译jni动态库

javah生成带有包名的头文件
(完)


猜你喜欢

转载自blog.csdn.net/himayan46/article/details/78882974
今日推荐