You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一份Cargo.toml的两个Rust项目一个编译正常一个报依赖错误如何解决

错误原因
  • 核心原因是crates.io已经下架了pbkdf2 v0.2.0版本:你使用的r2d2-mongodb v0.2.2依赖老旧的mongodb v0.3.12,而该版本mongodb明确要求pbkdf2 = "^0.2.0",没有可用匹配版本时就会触发依赖解析失败。
  • 两个相同配置项目表现不一致的原因:构建正常的项目本地存在旧的Cargo.lock文件,已经锁定了所有依赖的版本,且本地cargo缓存中保留了已下架的pbkdf2 v0.2.0包,不需要重新从crates.io拉取解析。报错项目没有旧的锁定文件,也未缓存对应版本的依赖包,重新解析依赖时找不到匹配版本就会报错。
解决方案
  • 方案1(推荐长期使用):升级依赖版本
    废弃老旧的r2d2-mongodb包,当前官方mongodb Rust驱动已经内置连接池实现,不需要额外引入r2d2适配包。你可以直接替换为适配你当前Rust版本的官方mongodb驱动,从根本上解决老旧依赖的兼容性问题。
  • 方案2(临时兼容,无需改代码):复用旧锁定文件
    把可以正常构建的项目根目录下的Cargo.lock文件复制到当前报错项目的根目录,再执行cargo build即可,cargo会直接按照锁定的版本解析依赖,只要本地缓存中存在对应版本的包就能正常构建。
  • 方案3(不推荐,存在兼容性风险):强制覆盖依赖版本
    在Cargo.toml中添加patch节强制使用高版本pbkdf2,跨大版本无法保证兼容性,可能出现编译或运行时错误,配置示例如下:
    [patch.crates-io]
    pbkdf2 = { version = "0.7.5", features = ["legacy"] }
    

内容的提问来源于stack exchange,提问作者maridob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:15:02