使用第三方so库时出现UnsatisfiedLinkError错误的原因以及解决方案
1.1 前言
在开发项目的时候我们免不了使用一些第三方的库来进行快速开发,有些第三方库只是简单的一个jar包,但是有些使用了jni开发,因此会包含so库文件,这个时候如果不小心我们就会遇到一个错误:java.lang.UnsatisfiedLinkError;
最近经常遇到有开发者在问使用环信sdk的时候出现这个错误;这里分享下问题原因以及解决方案;
1.2 相关信息
这里需要先解释一下相关信息hyphenatechatsdk提供的指令集类型仅提供armeabi-v7a、arm64-v8a、x86三种;
armeabi和armeabi-v7a是相近似的指令集,v7a是增强型指令集,运行速度,效率均有所提高,他们都是32位指令,并且兼容;arm64-v8a对应arm64位指令集;
arm64位策略和intel IA32不一样:intel64位指令是兼容intel32位指令,intel32位指令编译的程序可以直接在intel64位机器上运行;但是arm不是,arm64位和arm32位是彼此独立的指令系统,不兼容;arm这样设计的原因是因为运行在嵌入式上,设计指标更趋向于效率,和耗电考量;实际上arm64位芯片上同时包含着arm64指令处理器和arm32位指令处理器,只不过两个处理器彼此独立