gpt4 book ai didi

gcc - 如何正确避免有关 ".ARM.exidx"部分未设置 sh_link 的警告?

转载 作者:行者123 更新时间:2023-12-03 03:37:49 25 4
gpt4 key购买 nike

如果在我的链接器脚本中我有这个:

.ARM.exidx :
{
. = ALIGN(4);
PROVIDE(__exidx_start = .);

*(.ARM.exidx* .gnu.linkonce.armexidx.*);

. = ALIGN(4);
PROVIDE(__exidx_end = .);
} > rom AT > rom

构建项目时收到以下警告:

/home/freddie/arm-none-eabi-gcc-7.1.0-170503/bin/../lib/gcc/arm-none-eabi/7.1.0/../../../../arm-none-eabi/bin/ld: output/./application.elf: warning: sh_link not set for section `.ARM.exidx'

所以我将符号从该部分“移出”:

. = ALIGN(4);
PROVIDE(__exidx_start = .);

.ARM.exidx :
{
*(.ARM.exidx* .gnu.linkonce.armexidx.*);
} > rom AT > rom

. = ALIGN(4);
PROVIDE(__exidx_end = .);

警告消失了...有什么区别?由于我自动生成链接器脚本,我真的更喜欢将符号“放在”该部分中 - 这样上一节使用的内存区域(此处为“闪存”)就没有区别了。

有趣的是,另一种适合自动生成的“通用”方法给出了完全相同的警告:

.ARM.exidx :
{
*(.ARM.exidx* .gnu.linkonce.armexidx.*);
} > rom AT > rom

PROVIDE(__exidx_start = ADDR(.ARM.exidx));
PROVIDE(__exidx_end = ADDR(.ARM.exidx) + SIZEOF(.ARM.exidx));

最佳答案

我通过更改解决了问题:

  .ARM.exidx :
{
__exidx_start = .;
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
__exidx_end = .;
. = ALIGN(4);
} > FLASH

至:

  .ARM :
{
__exidx_start = .;
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
__exidx_end = .;
. = ALIGN(4);
} > FLASH

我认为这是可行的,因为某些神奇的输出节名称会自动设置一些标志。

关于gcc - 如何正确避免有关 ".ARM.exidx"部分未设置 sh_link 的警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45816655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com