我想用 gcc 编译一个带有 ARM 处理器链接时间优化的程序。当我在没有 LTO 的情况下编译时,系统会被编译。当我启用 LTO(使用 -flto)时,我收到以下汇编错误:
错误:无效的文字常量:池需要更近
环顾网络,我发现这与我系统中的常量有关,这些常量放置在一个名为 .rodata 的特殊部分中,该部分称为常量池,位于我系统中的 .text 部分之后。似乎在使用 LTO 编译时,由于内联和其他优化,这个 .rodata 部分离指令太远了,因此不再可能对常量进行寻址。是否可以将常量放在使用它们的函数之后?或者是否可以使用另一种寻址模式,以便仍然可以寻址 .rodata 部分?谢谢。