本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2021/10/12/remove-rust-std/
现代通用操作系统对于应用程序的支持很多,在硬件平台上操作系统做了管理,操作系统之上还有标准库对应用程序提供系统调用。然后如果只从跑起来的角度来说,只要有最上面和最下面的就行了。
如下图:

中间两层提供的都是抽象。而有些时候我们的应用程序需要运行在一个相对底层的情况下,我们就需要移除标准库的依赖,更进一步可能要减少对于部分操作系统的依赖。
nothing程序
如果编译一个空的rust程序,比如nothing.rs
fn main(){}
在Ubuntu下查看系统调用如下图

我这里的芯片是riscv的,所以第一步是新增.cargo/config文件
[build]
target = "riscv64gc-unknown-none-elf"
在代码头部取消标准库

这里编译会失败,因为println!也是std提供的,而core中没有。
移除后编译也是失败

panic_handler是致命错误处理函数,默认也是std提供,这里我们加一个空实现


查看产出物的信息,可以看到入口是0,这个产出物本质上是没有用处的。还需要补充上后面需要的内容。
这里需要加上_start函数
#[no_mangle]
extern "C" fn _start() {
loop{};
}
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2021/10/12/remove-rust-std/