新建 HelloWorld.java
class HelloWorld {
public native void helloWorld();
static {
System.loadLibrary("nativelib");
}
public static void main(String[] args) {
HelloWorld h = new HelloWorld();
h.helloWorld();
}
}
Compile the Program
javac HelloWorld.java
Generate the Header File 生成头文件
javac -h . HelloWorld.java
该命令会生成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: helloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_helloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
新建 HelloWorld.cpp文件
#include <iostream>
#include "HelloWorld.h"
using namespace std;
JNIEXPORT void JNICALL Java_HelloWorld_helloWorld(JNIEnv *env, jobject o) {
cout << "Hello World!" << endl;
}
Compile the Library 编译库文件
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
g++ -c -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux HelloWorld.cpp -o HelloWorld.o
g++ -shared -fPIC -o libnativelib.so HelloWorld.o -lc
Run the Example
java -cp . -Djava.library.path=./ HelloWorld