You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MCUXpresso项目Linux编译缺NewLib系统调用桩,为何Windows无需配置?

问题原因与解决方案

这个差异和Windows、Linux操作系统本身无关,是两个版本MCUXpresso自带的arm-none-eabi工具链的newlib库配置不同导致的。

1. Windows端(GCC 8.3.1)无需额外加库的原因

你当前Windows版本MCUXpresso自带的libcr_newlib_none.a已经内置了_exit、_kill、_getpid等newlib依赖的系统调用空桩实现,链接时可以直接找到对应符号,所以不会报未定义错误。
你可以通过以下命令验证这个结论,在Windows端工具链对应库目录下执行:

arm-none-eabi-nm libcr_newlib_none.a | grep "_exit"

输出会显示_exit符号已经在库中定义。

2. Linux端(GCC 10.2.1)需要加libnosys.a的原因

对应GCC 10.2.1版本的MCUXpresso工具链,对newlib相关的静态库做了拆分,libcr_newlib_none.a不再内置系统调用桩的实现,这部分功能被单独拆分到libnosys.a中,所以缺少这部分实现时就会抛出你遇到的未定义符号报错:

arm-none-eabi/bin/ld: arm-none-eabi/lib/thumb/v7-m/nofp/libc_nano.a(lib_a-abort.o): in function `abort':
abort.c:(.text.abort+0xa): undefined reference to `_exit'
arm-none-eabi/bin/ld: arm-none-eabi/lib/thumb/v7-m/nofp/libc_nano.a(lib_a-signalr.o): in function `_kill_r':
signalr.c:(.text._kill_r+0xe): undefined reference to `_kill'
arm-none-eabi/bin/ld: arm-none-eabi/lib/thumb/v7-m/nofp/libc_nano.a(lib_a-signalr.o): in function `_getpid_r':
signalr.c:(.text._getpid_r+0x0): undefined reference to `_getpid'
...

你原来的链接脚本GROUP段只包含了以下库,缺少libnosys.a:

GROUP (
  "libgcc.a"
  "libc_nano.a"
  "libm.a"
  "libcr_newlib_none.a"
)

兼容方案

如果要实现两个版本工具链的跨平台兼容,直接在GROUP段中固定添加"libnosys.a"即可,不会产生额外副作用,libnosys.a中的空桩实现和旧版本libcr_newlib_none.a内置的实现逻辑完全一致。
也可以在MCUXpresso项目配置中操作:

  • 打开【C/C++ Build -> Settings -> Tool Settings -> MCU Linker -> Libraries】
  • 在库列表中添加nosys,效果和修改链接脚本一致。

内容的提问来源于stack exchange,提问作者Vala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:57:04