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

Android ndk 如何在.so文件中查找文本重定位?,android-ndk,arm,shared-libraries,ndk-build,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/a

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

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

以下是Gentoo指南,介绍如何修复二进制文件中的文本重定位:


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

要找到文本relocs的确切位置,可以使用scanelf-T

以下是Gentoo指南,介绍如何修复二进制文件中的文本重定位:


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

好吧,对于readelf或objdump之类的东西来说,查看重定位表本身是微不足道的-您是否在问如何将这些偏移量与源代码中的位置相关联?@Notlikethat,我在问如何读取GET表,以及如何将偏移量关联回源代码。好吧,对于readelf或objdump之类的东西,查看重新定位表本身并不重要-您是在问如何将这些偏移量关联回源代码中的位置吗?@Notlikethat,我在问如何读取GET表,以及如何将偏移量与我的源代码联系起来。