1、问题
项目导入别人的so,有个项目没问题,但是这个有问题,运行提示这个错误
java.lang.UnsatisfiedLinkError: dlopen failed: ××××.so: has text relocations
2、临时规避的解决办法
把现在的项目targetSdkVersion版本降低: such as,又24变为22,这样可以解决问题(没有源代码的情况下)
android:targetSdkVersion="22"
6.0之前只会产生一个警告,系统还是可以正常加载包含text relocations的共享库的,但从6.0起,即SDK Version>=23时,系统将会拒绝加载包含text relocations的共享库,同时输出错误Log,根本原因,是so动态链接库的代码并非PIC(Position independent code)
最好的办法是去修复源代码然后编译,我们这里调用别人的so,没办法了,如果是自己的so,在使用NDK编译so时配置Android.mk,增添PIC相关的配置项,这样编译出来的so文件将不再有text relocations的问题。具体配置如下:
LOCAL_LDFLAGS += -fPIC