.\code.axf: Error: L6218E: Undefined symbol __aeabi_memcpy:取消勾选Dont Search Standard Libraries

在做cortex-m0内核移植的时候,这是报错,没找到相关的东西。
与undefined symbol不是特别相关,但是网上的帖子给我的想法是**“编译”相关的错误**

**.\code.axf: Error: L6218E: Undefined symbol __aeabi_memcpy (referred from main.o). .\code.axf: Error: L6218E: Undefined symbol __main (referred from startup_cmsdk_cm0.o). .\code.axf: Error: L6218E: Undefined symbol __use_two_region_memory (referred from startup_cmsdk_cm0.o).** 就像这张图一样 ![在这里插入图片描述](https://img-blog.csdnimg.cn/7db6520047c9435dbf7e0b02a2158716.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA54-t6IqxaQ==,size_20,color_FFFFFF,t_70,g_se,x_16)

顺着这个想法,偶然的回看,质疑了一下之前工程配置的问题,

在这里插入图片描述

<< 这个问题是一个链接器错误,出现在嵌入式开发过程中,通常涉及到 ARM 编译链(如 GNU Arm Embedded Toolchain)。让我们逐步分析并解决它。 --- ### 错误解释 `.Objects/ssj_control_board_GD32.axf: Error: L6218E: Undefined symbol __aeabi_assert (referred from mbrtu.o)` 上述错误表明,在链接阶段,链接器无法找到符号 `__aeabi_assert` 的定义。这个符号是标准库的一部分,用于处理断言失败的情况。如果你的代码或依赖的库中调用了 `assert()` 并且没有正确配置环境,则会出现此类问题。 --- ### 原因分析 1. **未链接 C 标准库** 默认情况下,`__aeabi_assert` 是由新lib库提供的,如果没有正确链接 libstdc++ 或 libc 库,就可能导致该符号缺失。 2. **缺少用户自定义实现** 如果你裁剪掉了默认的标准库实现,却没有提供自己的 `__aeabi_assert` 实现,也会导致此错误。 3. **编译项不完整** 可能是因为在编译或链接命令中遗漏了一些必要的标志,例如 `-lc`, `-lnosys`, 或者 `-lstdc++`。 4. **调试相关的宏影响** 如果启用了调试模式但没有正常包含相关支持文件,也可能引发类似的问题。 --- ### 解决方案 #### 方法一:确保正确链接标准库 检查你的 Makefile 或构建系统(如 CMake、Keil MDK 等)是否正确地指定了需要链接的所有标准库。对于 GCC 工具链,请确保加入以下参数: ```bash -lstdc++ -lsupc++ ``` 这些参数分别负责加载 C++ 运行时支持以及异常处理等功能模块。 #### 方法二:提供自定义的 `__aeabi_assert` 函数 你可以自行编写一个简单的替代版本以避免引用外部依赖项。例如: ```c void __attribute__((noreturn)) __aeabi_assert(const char* expr, const char* file){ // 自定义断言失败处理逻辑 while(1); // 死循环挂起 } ``` 将其放置在一个单独的源文件内并且保证参与整个项目的编译流程即可。 #### 方法三:禁用断言语句 如果当前工程不需要使用 `assert()`, 那么可以直接通过定义 `_NDEBUG` 宏来全局屏蔽掉所有与此有关的操作。 ```makefile CFLAGS += -DNDEBUG ``` #### 方法四:检查编译器和链接器设置一致性 确认使用的工具链版本一致,并仔细核对各个步骤之间的兼容性设定,尤其是针对不同目标平台所特有的属性调整部分。 --- 以上方法应该能够有效解决问题! --- ### 相关问题
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值