undefined reference to ‘end‘

相关问题:

一、undefined reference to `_exit

undefined reference to ‘end‘

warning: _close is not implemented and will always fail

一、环境:

ubuntu24.04实体机、

arm-none-eabi-gcc      gcc version 13.2.1 20231009 (15:13.2.rel1-2)

二、问题:

/usr/lib/gcc/arm-none-eabi/13.2.1/../../../arm-none-eabi/bin/ld: /usr/lib/gcc/arm-none-eabi/13.2.1/../../../arm-none-eabi/lib/libnosys.a(sbrk.o): in function `_sbrk':
/build/newlib-38V0JC/newlib-4.4.0.20231231/build/arm-none-eabi/libgloss/../../../libgloss/libnosys/sbrk.c:21:(.text+0x28): undefined reference to `end'

三、分析:

这个错误来自 newlib-nanolibnosys/sbrk.c,它试图使用符号 end 来初始化堆的起始地址,但你的链接器脚本里没有定义它。

符号名必须是 _end(带下划线),因为 sbrk.c 中用的是 extern char end;,而 GNU LD 默认会把 _endend 视为不同符号。

四、解决:

SECTIONS{
    . = 0;
    .text : {
        user/startup_hc32l13x.o
        *(.text)
    }
    .data : {
        *(.data)
    }
    .bss : {
        *(.bss)
    }
}

SECTIONS{
    . = 0;
    .text : {       /*写成 .text:{ 不对,要有空格。*/
        *(.text)    /*写成 *{.text} 不对,要为小括号。*/
    }
    .data : {
        *(.data)
    }
    .bss : {
        _sbss = .;         /* define a global symbol at bss start */
        __bss_start__ = _sbss;
        *(.bss)
        *(.bss*)
        *(COMMON)

        . = ALIGN(4);
        _ebss = .;         /* define a global symbol at bss end */
        __bss_end__ = _ebss;
        end    = .;
    }
}

添加 end    = .; 就好了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值