当我拥有最新的 rustc 和 cargo 版本时,为啥我会收到解析器功能的构建错误?

Posted

技术标签:

【中文标题】当我拥有最新的 rustc 和 cargo 版本时,为啥我会收到解析器功能的构建错误?【英文标题】:Why do I get a build error for the resolver feature when I have up to date rustc and cargo version?当我拥有最新的 rustc 和 cargo 版本时,为什么我会收到解析器功能的构建错误? 【发布时间】:2021-10-12 08:52:52 【问题描述】:

当我运行构建命令时

cargo build-bpf --manifest-path=Cargo.toml --bpf-out-dir=dist/program 

错误:下载失败solana-frozen-abi v1.7.9

原因: 无法从源获取包

原因: 无法解析 /home/USER/.cargo/registry/src/github.com-1ecc6299db9ec823/solana-frozen-abi-1.7.9/Cargo.toml 的清单

原因: 功能 resolver 是必需的

有人遇到类似问题,但原因是旧的 rustc 版本。我的看起来不错

rustc --version
rustc 1.55.0-nightly (7c3872e6b 2021-06-24)

cargo --version
cargo 1.55.0-nightly (9233aa06c 2021-06-22)

我的 Cargo.toml 文件看起来像

[package]
name = "test"
version = "0.0.1"
edition = "2018"
exclude = ["tests/**"]

[features]
no-entrypoint = []
test-bpf = []

[dependencies]
borsh = "0.8.2"
num-derive = "0.3"
num-traits = "0.2"
solana-program = "1.6.10"
spl-token =  version="3.1.1", features = [ "no-entrypoint" ] 
thiserror = "1.0"

[dev-dependencies]
solana-program-test = "1.6.10"
solana-sdk = "1.6.10"

[lib]
crate-type = ["cdylib", "lib"]

我已经下载了 metaplex rust 代码(完全一样的依赖)并且 build bpf 命令编译成功。

我也尝试过运行 cargo clean ,它不会改变任何东西。

【问题讨论】:

这是由于 cargo.lock 中的依赖关系 【参考方案1】:

来自 Cargo.toml 的相同输入并不意味着 Rust 构建可以在其他机器上重复 - Cargo.lock 包含使用的确切版本。此外,cargo clean 不会删除 Cargo.lock

https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html

【讨论】:

【参考方案2】:

我通过更新到 Solana 的最新版本 (1.7.9)(不是发布版本)来修复它:

sh -c "$(curl -sSfL https://release.solana.com/v1.7.9/install)"

【讨论】:

以上是关于当我拥有最新的 rustc 和 cargo 版本时,为啥我会收到解析器功能的构建错误?的主要内容,如果未能解决你的问题,请参考以下文章

Cargo 私有仓库部署

【RUST_BASIC】Rust for Linux环境搭建

如何告诉 Cargo 使用 git 标签来确定 crate 版本?

为啥win10下安装Rust的RLS会出现问题?

什么是Rust“工具链”?

使用 cargo 插件在 payara 上部署