HelloWorld.java
public class HelloWorld{
public native void hello();
static {
//设置查找路径为当前项目路径
System.setProperty("java.library.path", ".");
//加载动态库的名称
System.loadLibrary("hello");
}
public static void main(String[] args){
new HelloWorld().hello();
}
}
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;
}
HelloWorld.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: hello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_hello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
gcc 遇到的坑:
1. 要复制本地文件
sudo cp -r /Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/include/darwin/jni_md.h /Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/include/
2. 生成库指令
gcc -dynamiclib -I /Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/include/ HelloWorldImpl.c -o libhello.jnilib
文件分布:
运行情况: