MultiversX Rust测试框架运行cargo test报cc链接失败如何修复
问题根因
这个undefined reference to 'main'链接错误和系统的cc编译器本身无关,是MultiversX Rust testing framework的测试目标编译时没有生成可执行程序要求的main入口函数,直接原因一般是测试宏未正确展开、编译配置错误两类。
排查&修复步骤
- 检查测试文件配置
所有放在tests/目录下的集成测试文件,头部必须正确引入框架的导入宏,该宏会自动生成测试运行需要的main入口,标准引入写法如下:
注意不要手动在测试文件里自定义use multiversx_sc_scenario::*; // *缺失这行就不会自动生成main入口,是该错误的最高发诱因* multiversx_sc_scenario::imports!();fn main() {},会和框架自动生成的入口冲突,触发重复定义错误。 - 检查Cargo.toml配置
- 确认
multiversx-sc-scenario测试框架依赖放在[dev-dependencies]配置块下,不要放到普通运行时依赖[dependencies]中 - 不要在
[lib]、[[test]]配置块中手动指定crate-type为cdylib、staticlib等库类型,库类型编译目标不会生成main入口,会直接触发该链接错误;测试目标使用默认的可执行文件配置即可 - 确认合约核心依赖
multiversx-sc的版本和测试框架版本完全一致,版本不兼容会导致宏展开失败,无法生成入口
- 确认
- 清理编译缓存重试
旧的错误编译缓存会导致配置修正后仍然报错,执行以下命令清理后重新运行测试:cargo clean cargo test - 工作空间项目额外检查
如果是多包工作空间项目,确认根目录Cargo.toml的members列表已经包含测试所在的合约包,不要将测试目录加入exclude列表。
内容的提问来源于stack exchange,提问作者Fargerik
相关产品推荐
相关产品推荐

