libserial_port.so text relocations 警告弹窗

TEXTREL是"文本重定位”的术语"。
在targetSdkVersion>=23 Android 6.0 以上设备上跑debug版本时,出现一下警告日志,当targetSdkVersion<23且使用debug签名的APK运行在高版本系统上(大于6.0)出现以下弹窗

2019-04-26 15:09:45.033 1685-2398/cn.mashang.vscreen W/linker: /data/app/cn.mashang.vscreen-2/lib/arm/libserial_port.so has text relocations. This is wasting memory and prevents security hardening. Please fix.

在这里插入图片描述

修复源码中的text relocations

问题原因,谷歌了一下
libxxx.so: text relocations 这个问题在Android 6.0官方的更新说明中有说到:
Android 6.0官方的更新说明

现已正确实现 dlopen(3) RTLD_LOCAL 标记。请注意,RTLD_LOCAL 是默认值,因此不显式使用 RTLD_LOCAL 的 dlopen(3) 调用将受到影响(除非您的应用显式使用 RTLD_GLOBAL)。使用 RTLD_LOCAL 时,在随后通过调用 dlopen(3) 加载的库中并不能使用这些符号(这与由 DT_NEEDED 条目引用的情况截然不同)。

在之前版本的 Android 上,如果您的应用请求系统加载包含文本重定位信息的共享库,系统会显示警告,但仍允许加载共享库。从此版本开始,如果您的应用的目标 SDK 版本为 23 或更高,则系统会拒绝加载该库。为帮助您检测库是否加载失败,您的应用应该记录 dlopen(3) 失败日志,并在日志中加入 dlerror(3) 调用返回的问题描述文本。要详细了解如何处理文本重定位,请参阅此指南。

参阅此指南 (难以理解)

定位问题

so文件有text relocations问题,用 readelf命令
如果你是macOS,mac os X下没有这两个命令,可以用brew来安装,brew update && brew install binutils ,然后配置环境变量
用法

readelf -a so文件路径 | grep TEXTREL

在这里插入图片描述

TEXTREL表示代码段重定位表地址,PIC的共享对象不会包含任何代码段重定位表。匹配不到TEXTREL则无问题

谷歌的android-serialport-api串口项目的so文件有TEXTREL问题,那采取较新的NDK编译后呢?text relocations 警告没了。

my/android-serialport

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值