Android之解决java.lang.UnsatisfiedLinkError: dlopen failed: ××××.so: has text relocations
16lz
2021-01-26
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
3、如何定位so有问题
定位哪个so文件有text relocations问题,如下命令。
readelf -a path/to/yourlib.so | grep TEXTREL
不正常的:
readelf -a 2.so | grep TEXTREL 0x00000016 (TEXTREL) 0x0
只要有这个就不正常
0x00000016 (TEXTREL) 0x0
更多相关文章
- 【Android(安卓)Studio】制作启动画面Splash Screen
- Android(安卓)SDK环境配置
- Android(安卓)串口通讯集成
- Android(安卓)"java.lang.NoClassDefFoundError:*"报错的处理方
- Android(安卓)Studio下Jni开发配置
- android 学习日记
- 关于Android(JAVA)实例化接口假象的讨论
- opencv manager package was not found 解决办法
- android_qqApk反编译/android小工具/ddms截屏