JNI加载静态库及多线程操作交流贴

25 篇文章 0 订阅
3 篇文章 0 订阅

加载so问题,标准方法就可以了,有的时候需要用到静态库,即*.a,这时候System.load和System.loadLibrary无法将其加载,解决方法是将这些引用在C++的开发环境中配置好,一同编译成so文件,供JNI调用。

这些在单线程中都没有问题,但如果是多线程呢?同样的方式,将调用JNI的class定义成Thread的子类,以子线程的方式运行,会出现错误,以段错误居多,所以这里也透露出JNI多线程操作的一个设计方式,即如果C++部分需要以子线程方式运行,最好不要以Java开启线程,而应该在C++内部实现多线程,并把线程的操作封装成JNI供Java调用,Java部分遵循单线程与C++进行调用。

注:,当然这里是否真的是System.load和System.loadLibrary无法加载*.a文件还有待验证,同时静态库的引用顺序也关系到运行的成功与否。另外,多线程的调用,因为我的C++程序功能复杂,涉及不少的网络协议的实现,是否是子线程加载so与单线程加载so确实有区别,也需要验证,但从设计角度讲,认为上述的方式更为合理。不足之外还有待于和大家多多交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值