【问题标题】:How to build a standard Linux .so library with stable Rust without using std?如何在不使用 std 的情况下构建具有稳定 Rust 的标准 Linux .so 库?
【发布时间】:2017-03-29 15:20:08
【问题描述】:

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" 说库可以构建在 stable 之上。

【问题讨论】:

    标签: rust


    【解决方案1】:

    我认为在这种情况下,文档具有误导性。问题在于“图书馆”这个词的定义。

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

    本机库(dylibcdylib 或可能是staticlib)无法保证与这些符号/语言项相关联,因此必须预先定义它们。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-10
      • 1970-01-01
      • 2021-02-15
      • 2020-07-16
      • 1970-01-01
      • 2015-09-22
      • 2015-11-17
      • 2019-04-19
      相关资源
      最近更新 更多