我在使用 GCC 构建 STM32 项目时遇到问题。错误信息如下:
gcc -o Src/syscalls.o -c Src/syscalls.c gcc -o main Src/main.o Src/syscalls.o Src/sysmem.o Src/uart.o /usr/bin/ld: Src/sysmem.o: 注意: réadressage sur « _estack » dans lasection en Lecture « .text » /usr/bin/ld: Src/sysmem.o : 功能 « _sbrk » : sysmem.c:(.text+0xf): 对
_estack' /usr/bin/ld: sysmem.c:(.text+0x18): undefined reference to
_Min_Stack_Size' 的未定义引用
/usr/bin/ld: 注意:在 PIE 上创建 DT_TEXTREL
collect2:错误:ld 返回 1 退出状态
make: *** [Makefile:13 : main] 错误 1
我在编译 STM32 项目期间遇到链接器错误。它似乎与文件 sysmem.c 中的符号 _estack 和 _Min_Stack_Size 有关。链接器无法找到这些引用,导致构建失败。
对 _estack 的未定义引用:在 _sbrk 函数期间处理文件 sysmem.c 时,链接器报告对 .text 部分中的符号 _estack 的未定义引用。
对 _Min_Stack_Size 的未定义引用:此外,同一文件中还有对符号 _Min_Stack_Size 的未定义引用。
我正在寻求有关如何解决这些链接器错误并成功构建我的 STM32 项目的指导。任何有关可能导致这些问题的原因的帮助或见解将不胜感激。
这些符号通常在 **链接器脚本“* 中定义。您可能没有,或者您编写了一个无效的符号。
这是链接描述文件开头的示例:
/* Entry Point */
ENTRY(Reset_Handler)
/* Highest address of the user mode stack */
_estack = ORIGIN(RAM_START) + 96K; /* end of RAM */
/* Generate a link error if heap and stack don't fit into RAM */
_Min_Heap_Size = 0x200; /* required amount of heap */
_Min_Stack_Size = 0x400; /* required amount of stack */
当然,
RAM_START
是内存区域定义,Reset_Handler
是来自定义程序入口点的源文件之一的符号。