Solana Rust NFT合约执行cargo build编译失败如何解决?
问题根源
你出现编译错误的核心原因是自定义构建脚本build.rs的逻辑完全错误:
cccrate的作用是编译C/C++源代码并将其静态链接到Rust项目,你将Rust源文件src/main.rs传入cc::Build::file()方法,相当于强制C编译器去编译Rust代码,C编译器无法识别Rust语法,自然不会生成预期的.o目标文件,后续ar命令打包时找不到文件就会抛出报错。- 普通Solana合约开发完全不需要自定义构建脚本,你额外添加的
build.rs属于多余配置。
修复步骤
- 直接删除项目根目录下的
build.rs文件,如果你项目没有C语言绑定的需求,可以同步删除Cargo.toml中整个[build-dependencies]配置块。 - Solana合约不能直接用
cargo build编译,需要先安装官方Solana CLI工具后,执行cargo build-bpf命令编译为适配Solana链的BPF字节码.so文件,编译产物会默认输出到target/deploy/目录下,可直接用于链上部署。 - 额外检查项目结构:Solana合约属于动态库类型,不是可执行二进制程序,你需要将
src/main.rs重命名为src/lib.rs,并在Cargo.toml中添加如下配置指定库类型:
[lib] crate-type = ["cdylib", "lib"] name = "solana_nft"
合约的入口逻辑使用solana_program::entrypoint宏标注即可,不需要Rust二进制的main函数。
内容的提问来源于stack exchange,提问作者Rango527
相关产品推荐
相关产品推荐

