2

上下文:
我有一个名为“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 行文件名。

4

2 回答 2

1

正如@Solomon Ucko 指示我的那样,rustup update 是关键。

Running rustup update produced:
info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
info: syncing channel updates for '1.48-x86_64-unknown-linux-gnu'
info: checking for self-updates

  stable-x86_64-unknown-linux-gnu unchanged - rustc 1.59.0 (9d1b2106e 2022-02-23)
    1.48-x86_64-unknown-linux-gnu unchanged - rustc 1.48.0 (7eac88abb 2020-11-16)

info: cleaning up downloads & tmp directories

最后,rustup 使用的是旧的 1.48 版本,而不是安装的 1.59 版本。
要切换到我运行的较新版本:

rustup default stable

然后,我可以按照原始问题中链接的说明更改版本。

于 2022-03-02T16:53:45.833 回答
1

尝试更新edition="2018"edition="2021"; 否则默认为edition="2015"需要使用extern crate.

于 2022-03-02T13:39:12.790 回答