使用Rust的iroh库生成SecretKey时遭遇编译错误求助
使用Rust的iroh库生成SecretKey时遭遇编译错误求助
看起来你遇到的是rand版本不兼容导致的编译问题——虽然错误提示里看似矛盾地说ThreadRng没实现CryptoRng,但实际上是你手动指定的rand 0.10.0和iroh 0.96.1依赖的rand/rand_core版本不一致,编译器把两个版本的CryptoRng trait当成了完全不同的东西,才抛出了这个误导性的错误。
给你两个具体的解决思路:
方案一:移除手动指定的rand依赖,让Cargo自动匹配兼容版本
直接删掉Cargo.toml里的rand = "0.10.0"这一行,Cargo会自动根据iroh的依赖要求拉取适配的rand版本。修改后的Cargo.toml如下:
[package] name = "p2p-chatroom" version = "0.1.0" edition = "2024" [dependencies] anyhow = "1.0.102" iroh = "0.96.1" tokio = "1.49.0"
方案二:手动指定与iroh兼容的rand版本
先运行下面的命令查看iroh实际依赖的rand版本:
cargo tree | grep rand
比如输出里如果显示iroh依赖rand 0.9.x,就把Cargo.toml里的rand版本改成对应的版本号(比如rand = "0.9.0")。
另外,建议把代码里的rand::rng()换成rand库的标准调用方式rand::thread_rng(),避免版本差异带来的别名问题,修改后的main.rs:
use iroh::SecretKey; use rand::thread_rng; #[tokio::main] async fn main() -> anyhow::Result<()> { let mut rng = thread_rng(); let secret = SecretKey::generate(&mut rng); Ok(()) }
做完上面的修改后,重新运行cargo build应该就能成功编译了。
备注:内容来源于stack exchange,提问作者Fix448
相关产品推荐
相关产品推荐

