GCC-T链接选项问题
我已经用arm-none-eabi-gcc-to-object-with命令编译了这个项目GCC-T链接选项问题,gcc,linker,arm,ld,Gcc,Linker,Arm,Ld,我已经用arm-none-eabi-gcc-to-object-with命令编译了这个项目 arm-none-eabi-gcc --specs=nosys.specs -mcpu=cortex-m7 -mtune=cortex-m7 -Os -g -gdwarf-2 -c $< -o $(@) 然而,我得到了一些奇怪的错误 arm-none-eabi/bin/ld.exe: error: no memory region specified for loadable section `
arm-none-eabi-gcc --specs=nosys.specs -mcpu=cortex-m7 -mtune=cortex-m7 -Os -g -gdwarf-2 -c $< -o $(@)
然而,我得到了一些奇怪的错误
arm-none-eabi/bin/ld.exe: error: no memory region specified for loadable section `.text.memcmp'
我知道当我使用-T选项时,将使用链接脚本文件而不是默认链接脚本。似乎缺少某些内置函数的节定义。我试着把它修好
.text.memcmp : {*(.text.memcmp)}
在我的ld文件中,此部分似乎已修复,但我遇到另一个错误:
arm-none-eabi/bin/ld.exe: error: no memory region specified for loadable section `.text.memset'
因此,我认为在LD文件中放入.text.memset不是正确的修复方法,因为在我将“.text.memset”放入LD文件后,我遇到了另一个错误:
arm-none-eabi/bin/ld.exe: error: no memory region specified for loadable section `.text._snprintf_r'
我想我错过了GCC中为内置函数创建这些默认部分的一些选项
这个问题的根本原因是什么?如何解决?非常感谢你
更新:在下面添加LD文件:
MEMORY {
INIT_SRAM : ORIGIN = 0x34400000, LENGTH = 0x1FB000
INIT_SRAM_NO_CACHEABLE : ORIGIN = 0x3460A000, LENGTH = 0x1DF00
INIT_SRAM_STACK : ORIGIN = 0x34628000, LENGTH = 0x15000
RAM_RSVD : ORIGIN = ., LENGTH = 0
BOOT_TEST : ORIGIN = 0x43840000 LENGTH = 0x50
}
SECTIONS
{
.boot_test : {*(.boot_test)}> BOOT_TEST
.exception_table ALIGN(4) : > {*(.exception_table)}>INIT_SRAM
.startup ALIGN(4) : {*(.startup)}
.ramcode ALIGN(4) : > {*(.ramcode)}
.text ALIGN(4) : { *(.text) }
.ramcode ALIGN(4) : { *(.ramcode) }
.rodata ALIGN(4) : { *(.rodata) }
.data ALIGN(4) : { *(.data) }
.bss ALIGN(16) : { *(.bss) }
_TEST_SESSION_START = .;
.TEST_SESSION :{*(.TEST_SESSION)}
_TEST_SESSION_END = (. - 1);
_Stack_start = .;
__STACK_SIZE = SIZEOF(INIT_SRAM_STACK);
__RAM_NO_CACHEABLE_START = ADDR(INIT_SRAM_NO_CACHEABLE);
}
将.text ALIGN(4):{*(.text)}更改为.text ALIGN(4):{*(.text)(.text。)}可以修复此.text.xxx缺失的问题 我建议你提供链接器脚本的全部内容-IMHO,否则很难回答你的问题。@Frant我会更新帖子,非常感谢!谢谢-你会提供一个非常非常简单的C程序来触发你这边的问题吗?
MEMORY {
INIT_SRAM : ORIGIN = 0x34400000, LENGTH = 0x1FB000
INIT_SRAM_NO_CACHEABLE : ORIGIN = 0x3460A000, LENGTH = 0x1DF00
INIT_SRAM_STACK : ORIGIN = 0x34628000, LENGTH = 0x15000
RAM_RSVD : ORIGIN = ., LENGTH = 0
BOOT_TEST : ORIGIN = 0x43840000 LENGTH = 0x50
}
SECTIONS
{
.boot_test : {*(.boot_test)}> BOOT_TEST
.exception_table ALIGN(4) : > {*(.exception_table)}>INIT_SRAM
.startup ALIGN(4) : {*(.startup)}
.ramcode ALIGN(4) : > {*(.ramcode)}
.text ALIGN(4) : { *(.text) }
.ramcode ALIGN(4) : { *(.ramcode) }
.rodata ALIGN(4) : { *(.rodata) }
.data ALIGN(4) : { *(.data) }
.bss ALIGN(16) : { *(.bss) }
_TEST_SESSION_START = .;
.TEST_SESSION :{*(.TEST_SESSION)}
_TEST_SESSION_END = (. - 1);
_Stack_start = .;
__STACK_SIZE = SIZEOF(INIT_SRAM_STACK);
__RAM_NO_CACHEABLE_START = ADDR(INIT_SRAM_NO_CACHEABLE);
}