关于在centos7 64为引用android so引发的问题修复

背景: 公司有解码的app,解码库位c++编写so动态库. 之前做过一版在调用html5摄像头,然后提取图像进行解码,后面因为图像质量不佳放弃.

        最近 因为小程序api有更新 可以获取到相对清晰的图像,所以有重启了.

        前端使用微信的小程序的直播流  后端截取直播流的图像帧,解析帧的数据,进行解码.

        但是遇到问题,在springboot调用so动态库 踩了不少坑.

       1.so库不兼容,旧版html5已是两年前做的demo版,so库的来源不清楚了。现在没办法 直接把andorid app中的so 放到程序lib目录下 发现报找不到so

       2.so库路径不对  linux so动态库 要放置在/usr/lib 或/usr/lib64/目录下

       3.springboot程序 包名问题,调用so库的类 的包名 需与so库 命名规则一致 参照android调用jni

       4.由于库不兼容 需要重新编译 使用android 编译的库无法使用 需在centos7下编译so库

          a.下载android ndk 并设置环境变量  在命令行 执行ndk-build测试

          b.将c++文件编译成so动态库

             gcc -I /home/ndk/android-ndk/sysroot/usr/include  xx.c xx.cpp xx.cpp xx.cpp -fPIC -shared -o libxx.so

             -I 需引入ndk下的声明文件 例如jni.h 因为c或cpp中有引用android ndk

            xx.c xx.cpp xx.cpp xx.cpp  编译多 直接引入

            -fPIC -shared 需要添加

           -o 输出动态库

原文地址:https://www.cnblogs.com/John5/p/10319588.html