编译java文件得到头文件。
javac -h algo com/xx/xx/Algorithm.java # 输出到目录algo中
把c文件全部放进 algo
目录中,进入 algo
目录,执行gcc编译。
-I/System/Library/Frameworks/JavaVM.framework/Headers
-fPIC
PIC就是position independent code gcc -I/System/Library/Frameworks/JavaVM.framework/Headers -I./src algo_main.c src/*.c -fPIC -shared -std=c11 -o libalgo.so
src
目录中存放有所需的文件,编译得到 libalgo.so
Java工程中加载so文件,需要文件的绝对路径。
static { // 加载jni库文件 System.load("/Users/rustfisher/es/test_server/algo/libalgo.so"); }
编译到itoa时会出错,想办法替换掉这个函数。
需求是把十进制数转换为字符。
p1 = (char*)malloc(sizeof(char) * 4); //itoa(i + 1, p1, 10); sprintf(p1, "%d", i+1);