0

当我尝试在 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 编译没有帮助,因为文本重定位位于我用来优化某些计算的汇编文件中。如何知道源代码中文本重定位的确切位置?

4

1 回答 1

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)的支持。

于 2016-03-24T21:40:50.673 回答