Apple Silicon M1 macOS下ARM GNU链接器命令找不到问题求助
问题排查与解决方案
你的链接错误根源在于编译命令中引入了不必要的标准C库(-lc)和半主机库(-lrdimon),裸机Cortex-M0+环境不存在这些库依赖的主机系统调用(比如exit),导致链接器报错。以下是具体修正步骤:
1. 修正编译命令
移除多余的库链接参数,同时适配macOS的路径分隔符(用/替换\):
arm-none-eabi-gcc -O0 -g3 -mcpu=cortex-m0plus -mthumb -I../Include main.c startup_LPC845.S "-Wl,--no-warn-rwx-segments" -T LPC845_flash.ld -o main.elf
- 去掉
-lc和-lrdimon:裸机嵌入式程序无需依赖标准C库和半主机交互库 - 路径统一用
/:macOS不识别Windows风格的\路径分隔符,避免头文件或启动文件找不到的问题
2. 补全裸机适配代码
如果链接时出现__libc_init_array等符号未定义的错误,在main.c末尾添加空实现:
void __libc_init_array(void) {}
这是为了满足GCC工具链对库初始化的符号要求,裸机环境不需要实际逻辑。
3. 调整OpenOCD命令路径
同样适配macOS路径格式:
../OpenOCD/openocd -s ../OpenOCD/scripts -f interface/cmsis-dap.cfg -f target/LPC84x.cfg -c 'adapter speed 2000' -c "program main.elf reset exit"
4. 验证工具链架构兼容性
确保你安装的ARM GNU 12.3是Apple Silicon(arm64)版本,不要使用x86_64版本的工具链,否则可能出现隐性的执行或链接问题。
内容的提问来源于stack exchange,提问作者Anjula Serasinghe
相关产品推荐
相关产品推荐

