coremark移植坑之-nostartfiles -nostdlib参数

一、 如果coremark移植不成功,但是又不知道哪里错,明明RV官方测试能通过。

二、 检查这两个参数没设置。

三、参数含义

参数 含义
-nostdlib 不使用标准 C 库(libc)和标准启动文件(crt0.o 等)。通常用于裸机/嵌入式环境,开发者自行提供所有运行时支持。
-nostartfiles 不链接启动文件(如 crt1.o、crti.o、crtn.o)。程序入口点完全由开发者控制(如自定义 _start)。

四、解释

裸机 CoreMark

> 想象你买了一套毛坯房(裸机芯片),里面什么都没有------没有地板、没有水电、没有天然气。现在你想直接搬进去住(运行 CoreMark 程序)。


正常情况:拎包入住精装公寓

就像拎包入住精装公寓,你什么都不用操心:

精装公寓设施 对应编译环节
地板铺好了 crt0.o 启动文件已设置好栈、初始化 BSS 段
水电天然气通好了 libc 标准库提供 printf、malloc、time 等函数
物业管家一应俱全 glibc 处理程序入口、退出清理、信号处理

但毛坯房里什么都没有!

如果直接按正常方式编译,链接器会尝试调用精装公寓的基础设施,结果当然是崩溃------因为毛坯房里没有这些管道接口。

参数 作用 形象比喻
-nostartfiles 不链接默认的启动文件(如 crt0.o、crt1.o) 不要等别人帮你铺地板装门窗,你自己动手装修
-nostdlib 不链接标准 C 库(libc) 不要指望市政水电天然气,你自己拉电线接水管

❌不加参数时裸机运行的典型问题

> 入口点错误

> 默认启动文件 crt0.o 会尝试调用操作系统接口(如 Linux 的 _start → __libc_start_main),但裸机没有操作系统,CPU 上电后直接跳到 main 函数地址,根本找不到这些入口。

> 标准库函数悬空

> printf 想往 stdout 输出,但裸机没有终端;malloc 想向操作系统申请内存,但裸机没有内存管理器。这些调用会触发异常或直接崩溃。

> BSS 段未清零

> crt0.o 原本负责把未初始化的全局变量清零,裸机没人做这件事,导致程序读到垃圾值。


总之就是:裸机 CoreMark自己当全能装修工

裸机 CoreMark 需要自己提供替代物,就像毛坯房入住必须自己解决一切:

这是一些常用的裸机编译命令

bash 复制代码
riscv64-unknown-elf-gcc \
    -nostartfiles -nostdlib \        # 告诉编译器:别依赖精装公寓的基础设施
    -T link.ld \                     # 自己指定"户型图"(链接脚本)
    crt.S \                          # 自己写"装修手册"(启动汇编)
    syscalls.c \                     # 自己实现"简易水电"(极简系统调用)
    coremark.c \                     # 入住本身(CoreMark 源码)
    -lm -lgcc \                      # 只保留数学库和编译器内置库
    -o coremark.elf
相关推荐
芒果作者27 分钟前
我决定系统学习 Codex,并建立一套自己的知识库
学习
FPGA小迷弟43 分钟前
FPGA 与卫星:从星载硬件到在轨智能的完整技术解析
fpga开发·架构·fpga·1024程序员节·无线电
NamoAmitabha1281 小时前
CPU 内部结构是什么?---deepseek
fpga开发
abc light2 小时前
ARM 裸机开发(6)——时钟树与定时器
arm开发·单片机·fpga开发
代码山河11 小时前
Python就业方向全解析:后端、爬虫、数据分析、AI你选哪个?
python·学习·架构·教程·面向对象·项目
释厄62311 小时前
AI学习层更新与跨体转移律——人类社会同构·不缺理解缺 U
人工智能·学习
小嘉丶学长15 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节
小李不想当小白16 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
1560820721917 小时前
JFMZQ28DR、JFMZQ68DR、RFsoc XCZU47DR、XCZU48DR 信号处理板
fpga开发·信号处理
XMAIPC_Robot19 小时前
-40~85℃宽温实测:RK3588 机器人控制器硬件底座,长时间 SLAM 定位稳定性验证
人工智能·fpga开发·机器人·边缘计算·arm+fpga·rk3588+fpga