如何在.so文件中查找文本重定位?

时间:2016-03-20 13:19:07

标签: android-ndk arm shared-libraries ndk-build

当我尝试在Android 6上运行我的.so文件时,我收到了以下消息:

Loading Native Audio Library...
03-20 15:07:55.182 19446 19446  : Cannot Load Native Library !!!
03-20 15:07:55.182 19446 19446  : java.lang.UnsatisfiedLinkError: dlopen failed: /data/app/com.myapp.android.sdk-1/lib/arm/myso.so: has text relocations

从消息中我可以理解我的.so文件中有文本重定位。 使用-fPIC编译没有帮助,因为文本重定位在我用来优化某些计算的汇编文件中。 如何知道源代码中文本重定位的确切位置?

1 个答案:

答案 0 :(得分:2)

要查找文本重定位的确切位置,可以使用scanelf -T

以下是有关如何修复二进制文本重定位的Gentoo指南:https://wiki.gentoo.org/wiki/Hardened/Textrels_Guide

这是一个很长时间的警告,Android链接器开始在Marshmallow中针对sdk版本> = 22(针对lp32平台,例如arm / x86 / mips)的应用程序强制执行此操作。而对lp64(arm64 / x86_64 / mips64)的支持从一开始就不存在。