如何在不使用std的情况下构建具有稳定Rust的标准Linux .so库?

时间:2017-03-29 15:20:09

标签: rust

Cargo.toml:

[package]
name = "proba"
version = "0.1.0"

[lib]
name = "mycoollib"
path = "src/mycoollib.rs"
crate-type = ["cdylib"]

的src / mycoollib.rs:

#![no_std]

fn func(v: i32) -> i32 {
    v + 10
}

当我尝试运行cargo build时:

error: language item required, but not found: `panic_fmt`
error: language item required, but not found: `eh_personality`

需要每晚构建才能实现panic_fmteh_personality,但Rust书中的"Using Rust Without the Standard Library"表示lib可以构建在稳定版本上。

1 个答案:

答案 0 :(得分:2)

我认为在这种情况下文档会产生误导。问题在于“库”一词的定义。

Rust库(有时称为 rlib )可以使用#[no_std],不需要panic_fmteh_personality的定义。那是因为最终它会被链接到一个二进制文件中,它使用标准库来定义这些符号。

原生图书馆(dylibcdylib或可能staticlib)无法保证与这些符号/语言项目相关联,因此必须事先对其进行定义。< / p>

如您所见,这两者都可以称为“图书馆”。我认为这本书的术语有点松散,导致混淆。