转载

JNI 在mac中使用JNI

编译java文件得到头文件。

javac -h algo com/xx/xx/Algorithm.java
# 输出到目录algo中

把c文件全部放进 algo 目录中,进入 algo 目录,执行gcc编译。

  • 添加jni需要的头文件
    • -I/System/Library/Frameworks/JavaVM.framework/Headers
  • 需要编译的c文件目录
  • -fPIC PIC就是position independent code
    • PIC使.so文件的代码段变为真正意义上的共享
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");
}

用sprintf代替itoa

编译到itoa时会出错,想办法替换掉这个函数。

需求是把十进制数转换为字符。

   p1 = (char*)malloc(sizeof(char) * 4);
//itoa(i + 1, p1, 10);
sprintf(p1, "%d", i+1);
原文  http://rustfisher.github.io/2018/10/18/Java_note/JNI_use_in_mac/
正文到此结束
Loading...