ld:无效的字符串偏移量...对于部分“.strtab”

ld: invalid string offset ... for section `.strtab'

我正在新平台上使用 GNU toolchain/gcc 4.9 构建一个 c++ 项目(debian stretch 在 jetson K1 评估板上)。链接器给出了很多消息,例如

usr/bin/ld: ../../../../lib/libsomething.so: invalid string offset 3118 >= 2767 for section `.strtab'

我什至不知道这是一个错误、一个警告还是一些链接器 smalltalk。该项目构建并运行,但这让我感到困惑。

我已经在几个 ARM 和英特尔平台上构建了这个项目,使用相同的工具链(但在 Ubuntu 或 Debian Jessie 上),但从未见过这些东西。

我看到这可能与使用 make -j 的并行构建有关,但如果我在没有 -j.

的情况下重建所有库,也会发生这种情况

请提示我这是什么以及如何摆脱它。

更新:

在 Binutils 2.33 之前的 ld.bfd 中存在错误。

它尝试读取 ARM CMSE 符号名称,但使用 .strtab 而不是 .dynstr。如果符号在共享库中被剥离,其 .strtab 部分比 .dynstr 短,因此对于 .dynsym 中的某些符号,它们名称的偏移量(实际上引用 .dynstr ) 超过 .strtab 的大小。因此,链接器发出了警告。

如果您需要更多详细信息,请查看修复该问题的补丁:https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=baf46cd78048e1b959462567556e1de1ef6b9039