上下文:
我有一个名为“libmaths”的本地 C 库,然后使用 Bindgen 创建一个“libmaths-sys”包,该包在本地存储在与我的项目相同的目录中。
问题:
我想使用 2021 版 Rust 中的一些功能,目前我的项目是在 2018 年构建的。我正在尝试按照以下说明更新项目:
https://doc.rust-lang.org/cargo/commands/cargo-fix.html
运行 cargo fix --edition。如果您的项目具有多个功能,还可以考虑使用 --all-features 标志。如果您的项目具有由 cfg 属性控制的特定于平台的代码,您可能还希望使用不同的 --target 标志多次运行 cargo fix --edition。
修改 Cargo.toml 以将 edition 字段设置为新版本。
运行您的项目测试以验证一切仍然有效。如果发出新警告,您可能需要考虑再次运行 cargo fix(不带 --edition 标志)以应用编译器给出的任何建议。
要运行 cargo fix --edition,编译器告诉我删除 cargo toml 中的 edition="2018"。在此之后,我收到一个编译错误,指出找不到 libmaths-sys。代码在 2018 年编译和执行正常,但不是没有这个版本标签。
我找不到任何有类似问题的人,这是我的第一个 stackoverflow 问题,所以不确定如何最好地显示我的代码,因为它是一个小项目的上下文。
错误代码
error[E0432]: unresolved import `libmaths_sys`
--> src/main.rs:1:5
|
1 | use libmaths_sys::*; // lib.rs in sys crate
| ^^^^^^^^^^^^ maybe a missing crate `libmaths_sys`?
文件结构和项目概述
.
├── Cargo.lock
├── Cargo.toml
├── libmaths
│ ├── add.c
│ ├── add.h
│ └── subtract.c
├── libmaths-sys
│ ├── build.rs
│ ├── Cargo.lock
│ ├── Cargo.toml
│ ├── src
│ │ └── lib.rs
│ └── wrapper.h
├── README.md
└── src
├── lib.rs
└── main.rs
libmaths包含返回a + b的add.c和返回a - b的subtract.c,头文件add.h指向两个.c文件
bindgen 生成的 Rust 代码通过 libmath-sys 板条箱中的 lib.rs 附加,该板条箱链接到我从树中省略的 OUT DIR 以保存 200 行文件名。