使用自定义构建工具构建JNI库
使用自定义构建工具构建JNI库需要进行以下步骤:
1.编写JNI源代码
/* HelloJNI.java */
public class HelloJNI {
static {
System.loadLibrary("hello"); // 加载名为hello的动态链接库
}
private native void sayHello(); // Java本地方法,该方法会调用C/C++实现
public static void main(String[] args) {
new HelloJNI().sayHello(); // 调用本地方法
}
}
2.编写JNI头文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class HelloJNI */
#ifndef _Included_HelloJNI
#define _Included_HelloJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloJNI
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
3.编写C/C++源代码实现JNI头文件中的本地方法
/* HelloJNI.c */
#include
#include
#include "HelloJNI.h"
JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv *env, jobject thisObj) {
printf("Hello World!\n");
return;
}
4.编写Makefile文件
# Makefile for HelloJNI.c
CC=gcc
CFLAGS=-fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux
LDFLAGS=-shared
LIBNAME=libhello.so
.PHONY: all clean
all: $(LIBNAME)
$(LIBNAME): HelloJNI.o
$(CC) $(LDFLAGS) -o $@ $<
HelloJNI.o: HelloJNI.c
$(CC) $(CFLAGS) -c $<
clean:
rm -f HelloJNI.o $(LIBNAME)
5.使用make命令进行构建
make
6.将生成的JNI库(libhello.so)拷贝到Java项目的lib文件夹里,并在Java代码中使用
/* HelloJNI.java */
public class HelloJNI {
static {
System.loadLibrary("hello"); // 加载名为hello的动态链接库
}
private native void sayHello(); // Java本地方法,该方法会调用C/C++实现
public static void main(String[] args) {
new HelloJNI().sayHello(); // 调用本地方法
}
}
7.使用Java编译器编译Java代码
javac HelloJNI.java
8.执行Java程序
java HelloJNI
这样就可以在Java中使用JNI库了。