【问题标题】:text relocations despite -fPIC?尽管 -fPIC 文本重定位?
【发布时间】:2017-02-18 19:48:46
【问题描述】:

我正在尝试为 ARM 重新编译一个大小适中的软件堆栈 (doubango)。两周后,我想我终于完成了,因为具有文本重定位的库不再为 armeabiarmv5tearmv7-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


    【解决方案1】:

    如果所有内容都使用-fPIC 构建,则剩余的文本重定位通常在任何手写程序集中。

    似乎已知 ffmpeg 的汇编代码存在一些文本重定位问题:

    【讨论】:

    • 是的,我用--disable-asm 标志重建了ffmpeg,并且生成的库本身没有文本重定位(因为不包括汇编程序部分)。 ARM 库本身没有文本重定位,这意味着我清理它们很好;只有 NEON 库有 1 个文本重定位,这就是我难过的原因。
    • 我在 doubango 的 github 上打开了一个问题,但我不期待/希望得到回复。 github.com/DoubangoTelecom/doubango/issues/486
    猜你喜欢
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 2015-09-27
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    相关资源
    最近更新 更多