1.编写带有native声明的方法的Java类
2.使用javac命令编译编写的Java类
3.使用java -jni className 来生成后缀名为.h的头文件
4.使用其他语言(C、C++)实现本地方法
5.将本地方法编写的文件生成动态链接库
一代码:(不要带包路径)
/** * native-0study * * @author xuedui.zhao * @create 2018-04-23 */public class HelloWorld { public native void hello(); static{ System.loadLibrary("hello"); } public static void main(String[] args){ new HelloWorld().hello(); }}
二:
在终端执行 : javac HelloWorld.java
这时会生成HelloWorld.class 文件
三:使用java -jni className 生成后缀名为.h的头文件
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class HelloWorld */ #ifndef _Included_HelloWorld#define _Included_HelloWorld#ifdef __cplusplusextern "C" {#endif/* * Class: HelloWorld * Method: hello * Signature: ()V */JNIEXPORT void JNICALL Java_HelloWorld_hello (JNIEnv *, jobject); #ifdef __cplusplus}#endif#endif
四:创建 HelloWorldImpl.c 文件
#include "jni.h"#include "HelloWorld.h"#include <stdio.h>JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *env,jobject obj){ printf("Hello World!\n"); return;}
五:将本地方法编写的文件生成动态链接库
gcc -dynamiclib -I /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/include HelloWorldImpl.c -o libhello.jnilib
此时会抛出异常:
HelloWorldImpl.c:1:10: fatal error: ‘jni.h‘ file not found
#include "jni.h"
^~~~~~~
1 error generated.
六:sudo cp /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/include/darwin/jni_md.h /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/include
七:ls -al
drwxr-xr-x 7 xuedui.zhao staff 224 4 23 21:35 .
drwxr-xr-x 9 xuedui.zhao staff 288 4 23 11:52 ..
-rw-r--r-- 1 xuedui.zhao staff 442 4 23 14:07 HelloWorld.class
-rw-r--r-- 1 xuedui.zhao staff 377 4 23 14:07 HelloWorld.h
-rw-r--r-- 1 xuedui.zhao staff 276 4 23 14:06 HelloWorld.java
-rw-r--r-- 1 xuedui.zhao staff 170 4 23 21:27 HelloWorldImpl.c
-rwxr-xr-x 1 xuedui.zhao staff 8400 4 23 21:35 libhello.jnilib
八:终端执行 : java HelloWorld
Hello World!
原文地址:https://www.cnblogs.com/snowHorse/p/8921995.html