问答

汇集网友智慧,解决技术难题

21ic问答首页 - GD32 Eclipse提示错误 undefined symbol `__Vectors_End'

define RS Eclipse 错误 VECTOR 国产芯片

GD32 Eclipse提示错误 undefined symbol `__Vectors_End'

Chekey2024-06-25
按照官方文档步骤,设置后编译提示undefined symbol `__Vectors_End' referenced in expression错误,感觉ld文件,但找不到文件的问题。/* memory map */
MEMORY
{
  FLASH (rx)      : ORIGIN = 0x08000000, LENGTH = 256K
  RAM (xrw)       : ORIGIN = 0x20000000, LENGTH = 48K
}

ENTRY(Reset_Handler)

SECTIONS
{
  __stack_size = DEFINED(__stack_size) ? __stack_size : 20K;

/* ISR vectors */
  .vectors :
  {
    . = ALIGN(4);
    KEEP(*(.vectors))
    . = ALIGN(4);
    //__Vectors_End = .;
    //__Vectors_Size = __Vectors_End - __Vectors;
  } >FLASH

  .text :
  {
    . = ALIGN(4);
    *(.text)
    *(.text*)
    *(.glue_7)
    *(.glue_7t)
    *(.eh_frame)

    KEEP (*(.init))
    KEEP (*(.fini))

    . = ALIGN(4);
    /* the symbol ‘_etext’ will be defined at the end of code section */
    _etext = .;
  } >FLASH

回答 +关注 9
2593人浏览 8人回答问题 分享 举报
8 个回答
  • 在上面的代码中,__Vectors_End 被定义为向量表的结束位置。这个符号是由编译器生成的,用于标记向量表的结束。在你的代码中,将其注释掉可能会导致链接器无法解析向量表的边界,从而出现错误。
  • /* ISR vectors */
    .vectors :
    {
      . = ALIGN(4);
      KEEP(*(.vectors))
      . = ALIGN(4);
      __Vectors_End = .;    /* 设置向量表结束位置 */
    } >FLASH

  • 在你的链接脚本中,你尝试注释掉了设置 __Vectors_End 的代码,这可能导致链接器无法正确处理向量表的结束位置。
  • 错误信息提示了 undefined symbol '__Vectors_End' referenced in expression,这意味着链接器在链接过程中找不到 __Vectors_End 这个符号的定义。
  • 确保在你的代码或链接脚本中正确定义了所有的中断向量,以确保 .vectors 段能够正确填充。
  • 这段代码确保在 .vectors 段结束时定义了 __Vectors_End 和计算了向量表的大小 __Vectors_Size。
  • 正确的 .vectors 段定义:保证 .vectors 段包含所有的中断向量,并且在向量表结束处正确定义 __Vectors_End。你可以尝试将下面的注释部分取消注释,看看是否能解决问题:
    .vectors :
    {
      . = ALIGN(4);
      KEEP(*(.vectors))
      . = ALIGN(4);
      __Vectors_End = .;
      __Vectors_Size = __Vectors_End - .;
    } >FLASH
  • 问题出现在链接脚本中找不到 __Vectors_End 符号的定义,这通常是因为在链接脚本中定义了 .vectors 段但没有正确定义 __Vectors_End。

    定义 __Vectors_End 和 __Vectors_Size:这两个符号通常用来标识中断向量表的结束和大小。确保在 .vectors 段中正确定义和使用这些符号。



您需要登录后才可以回复 登录 | 注册