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_fmt
和eh_personality
,但Rust书中的"Using Rust Without the Standard Library"表示lib可以构建在稳定版本上。
答案 0 :(得分:2)
我认为在这种情况下文档会产生误导。问题在于“库”一词的定义。
Rust库(有时称为 rlib )可以使用#[no_std]
,不需要panic_fmt
或eh_personality
的定义。那是因为最终它会被链接到一个二进制文件中,它使用标准库来定义这些符号。
原生图书馆(dylib
,cdylib
或可能staticlib
)无法保证与这些符号/语言项目相关联,因此必须事先对其进行定义。< / p>
如您所见,这两者都可以称为“图书馆”。我认为这本书的术语有点松散,导致混淆。