JNI动态加载so文件

最近在工作中遇到一个问题,就是一些c/c++工程师写好的代码要移植到移动端使用,但是这些函数本身不可能符合JNI规范,打包出来的so动态依赖库是没办法直接调用的。所以还是要写jni来动态加载so文件,把他们桥接起来,Jni怎么写这里就不说了,在c/c++文件里#include <dlfcn.h>这个头文件,写个函数指针,利用dlopen()函数就可以实现动态加载so文件。这里有如下几点心得体会:


①打包成so库的时候,一定要注意交叉编译的工具链。不同的工具链打包出来的so文件是不能在不同架构上打开的,比如工具链是android_x86,就不能在是x86_64的架构的手机上使用,这点当初入坑了。还有一点的是,虽然android内核是linux,但linux_x86工具链打包出来的so文件也是不能在android_x86上打开的。

②一般而言,so库应该尽量暴露出少的接口,在写jni之前,应该先写一份c/c++的代码包含需要暴露出来的接口,再在Jni调用这份代码里面的函数。

③dlopen()函数传so文件路径的文件,这个so件同样用System.loadLibrary()即可,放在libs或者jniLibs目录下。打开的时候直接dlopen("xx.so");不需要在其它路径上再放置一份。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值