遭遇Anchor与rustc版本不兼容问题求助
解决Anchor开发中rustc与solana-program版本不兼容问题
方案一:升级Rust到兼容版本(彻底解决)
这是最直接的处理方式,错误提示明确说明solana-program v1.18.20需要rustc 1.75.0及以上版本,当前版本不满足要求:
- 执行Rust升级命令:
rustup update stable - 验证升级结果:
rustc --version,确认输出版本为1.75.0或更高 - 重新运行
anchor build即可,后续新增依赖或创建新项目都不会再触发该版本冲突
方案二:固定Solana与Anchor的兼容版本(不想升级Rust时使用)
如果暂时不想升级Rust,需要将Solana和Anchor版本锁定到与rustc 1.72.0-dev兼容的范围(比如Solana 1.17.x系列):
- 全局安装指定Solana版本:
solana-install init 1.17.17(选择1.17系列的最新稳定版) - 创建新项目时指定兼容的Anchor版本:
anchor init my_project --anchor-version 0.29.0(Anchor 0.29.x与Solana 1.17.x完全兼容) - 已有项目修改
Cargo.toml,把所有Solana相关依赖的版本固定为1.17.x,示例:solana-program = "=1.17.17" solana-sdk = "=1.17.17" anchor-lang = "=0.29.0" - 执行
rm Cargo.lock && cargo update,重新生成依赖锁文件后运行anchor build
方案三:用rustup为项目单独指定Rust版本(多版本场景适配)
如果同时维护多个需要不同Rust版本的项目,可以给当前Anchor项目单独配置工具链:
- 安装指定版本的Rust:
rustup install 1.75.0 - 在项目根目录创建
rust-toolchain.toml文件,写入以下内容:[toolchain] channel = "1.75.0" components = ["rustfmt", "clippy"] target = ["wasm32-unknown-unknown"] - 之后每次进入该项目目录,rustup会自动切换到1.75.0版本,避免版本冲突
为什么之前的临时方法无效?
删除cargo.lock后执行cargo add solana-program@=1.17.0只能临时将依赖拉到兼容版本,但新增依赖或创建新项目时,Cargo默认会拉取最新版的Solana/Anchor依赖,而最新版又要求更高的Rust版本,因此冲突会反复出现。
内容的提问来源于stack exchange,提问作者Aditya Sharma
相关产品推荐
相关产品推荐

