【问题标题】:RISC V LD error - (.text+0xc4): relocation truncated to fit: R_RISCV_JAL against `*UND*'RISC V LD 错误 - (.text+0xc4): relocation truncated to fit: R_RISCV_JAL against `*UND*'
【发布时间】:2020-07-30 08:54:10
【问题描述】:

有没有人知道我为什么会出现以下错误:-

       /tmp/cceP5axg.o: in function `.L0 ':

      (.text+0xc4): relocation truncated to fit: R_RISCV_JAL against `*UND*'

       collect2: error: ld returned 1 exit status

【问题讨论】:

  • 如果您提供一些有关您如何到达该错误消息的上下文,那么解释它的原因会容易得多。例如,如果您同时编译 C 和 C++,您可能会丢失 extern "C"

标签: riscv


【解决方案1】:

R_RISCV_JAL 重定位可以表示偶数符号 21 位偏移量(-1MiB 到 +1MiB-2)。如果您的符号超出此限制,则您有此错误。

【讨论】:

    【解决方案2】:

    此错误也可能是使用硬编码偏移量的分支指令的奇怪结果。我在一个远小于 2Mib 的程序上遇到了同样的错误。原来是因为我有几条指令看起来像bne rd, rs, offset,但偏移量是一个像 0x8 这样的数字文字。

    解决方案是删除文字偏移量并将其替换为代码中的标签,使其看起来像

    bne x7, x9, branch_to_here
    [code to skip]
    branch_to_here:
        more code ...
    

    而不是

    bne x7, x9, 0x8
    [code to skip]
    more code ...
    

    当我对每个分支指令都这样做时,错误就消失了。很抱歉迟到了 10 个月才回答这个问题,但我希望它对您有所帮助,匿名读者。

    【讨论】:

      猜你喜欢
      • 2020-09-18
      • 1970-01-01
      • 2012-05-16
      • 2019-03-09
      • 1970-01-01
      • 2021-12-29
      • 2021-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多