【发布时间】:2017-02-18 19:48:46
【问题描述】:
我正在尝试为 ARM 重新编译一个大小适中的软件堆栈 (doubango)。两周后,我想我终于完成了,因为具有文本重定位的库不再为 armeabi、armv5te、armv7-a 提供它们。不过,armv7-a-neon 还是有的……
我知道链接到包含文本重定位的静态库或共享库也会将它们引入我的库中,并且为了避免应该在他的 CFLAGS 中使用-fPIC,同时重新编译所有内容以构建与位置无关的代码。所有这些都完成了,我还构建了没有文本重定位的 FFMPEG...
我不明白的是:如果我对所有拱门使用相同的源文件集,并手动检查 .a 文件是否具有文本重定位,为什么只有一个ARMv7 NEON 出现单个文本重定位?
我正在使用readelf 来检查readelf -a <libame.a> | grep TEXTREL 和.a 和.so 库。
devshark@ubuntu:~/SCRATCH/doubango_env/doubango/android-projects/output/gpl/armv7-a-neon/lib$ readelf -a libtinyWRAP.so | grep TEXTREL
0x00000016 (TEXTREL) 0x0
0x0000001e (FLAGS) SYMBOLIC TEXTREL BIND_NOW
如何找到在我的 armv7neon .so 库中引入文本重定位的罪魁祸首?
我正在使用 NDK r12b。这是整个构建输出的 pastebin:好的,没有 pastebin 或 pastebin,因为它们不允许 2.1mb 的文本。
太好了。那么,有什么想法为什么文本重定位只出现在 NEON 中?
这个问题可能与这个问题类似,只是我也没有针对 x86 的重定位。 Why is NDK generating shared library for x86 with text relocation even after setting -fPIC flag?
【问题讨论】:
标签: android c android-ndk cross-compiling