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

更多相关文章

  1. 【Android(安卓)Studio】制作启动画面Splash Screen
  2. Android(安卓)SDK环境配置
  3. Android(安卓)串口通讯集成
  4. Android(安卓)"java.lang.NoClassDefFoundError:*"报错的处理方
  5. Android(安卓)Studio下Jni开发配置
  6. android 学习日记
  7. 关于Android(JAVA)实例化接口假象的讨论
  8. opencv manager package was not found 解决办法
  9. android_qqApk反编译/android小工具/ddms截屏

随机推荐

  1. 赵雅智_ListView
  2. TextView跑马灯无效的解决办法
  3. EditText 修改光标颜色及位置
  4. Android ADT 找不到Annotation Processin
  5. Android StateMachine分析
  6. Android测试用例执行线程和UI线程
  7. Android开发时提示Your project contains
  8. android文件系统
  9. android input及简单am命令
  10. Android 网络框架学习之Retrofit