后台开发中 调取so库
程序员文章站
2022-06-09 16:58:33
...
由于公司将算法全部放到云上做处理,因此需要创建linux的动态链接库进行线上使用,之前做Android的都知道Android自身是cmake进行编译成so库并通过JNI层和java进行调用的,那么同理。
第一步
- 准备我们的linux环境
# yum install gcc
yum install gcc-c++ libstdc++-devel
增加我们的gcc的编译环境。
- 准备我们的java环境(注意你的本地jdk版本要和云上保持相同,否则会出现版本大于50的error)
yum install java-1.8.0-openjdk*
第二部
进行编写jni层内容
public class CoBrainLib {
static {
// System.loadLibrary("/CoBrainLib");
System.load("/root/cogrowth/libss.so");
}
public native float add(int x, int d);
public static void main(String[] args) {
System.out.println("Hello World!");
float add = new CoBrainLib().add(1, 1);
System.out.println("< 当前累加结果为: " + add);
}
}
我们使用
javah CoBrainLib
进行生成我们需要的JNi
extern "C"
JNIEXPORT jfloat JNICALL Java_com_cogrowth_algorithm_jni_CoBrainLib_add(JNIEnv *env, jobject /* this */oc, jint x, jint y) {
return x+y; //简单的加法
}
第三步
进行生成我们需要的so文件
g++ -I "/usr/lib/jvm/java-1.8.0/include/linux/" -I "/usr/lib/jvm/java-1.8.0/include" -fpic -shared -o /root/cogrowth/libss.so /root/cogrowth/CoBrainLib.cpp
第四步
进行调用
java -jar test.jar // 这里打了一个jar包