首页 > 解决方案 > 使用 no_std 的货物测试失败,错误代码为 176、160

问题描述

在 main.rs 中使用以下代码,当我运行cargo test它时,当我在 main 函数中添加测试或任何语句时,它会返回错误代码 176。它开始返回错误代码 160。

#![no_std]
#![no_main]

#[cfg(test)]
#[macro_use]
extern crate std;
#[cfg(not(test))]
extern crate panic_halt;

#[no_mangle]
pub unsafe extern "C" fn main() {

}

从这个链接我发现,

退出代码 176 的意思是“无法在网络驱动器上安装。在您的首选项中选择另一个安装位置,然后重试安装。”

当我试图通过 lldb 找到回溯时,它返回了

错误:无效线程

我找不到任何提到类似错误的线程,所以在这里问。任何帮助表示赞赏。

使用 nightly (nightly-x86_64-apple-darwin) 谢谢。

标签: rustrust-cargorust-no-std

解决方案


问题是你的main函数,它对 unix 平台有一个无效的签名。它必须返回一个i32(或更好c_int,但为简单起见,我们假设它们是相同的)。这176只是rax离开main函数时寄存器中的一些随机值。

因此,将您的main签名更改为:

pub unsafe extern "C" fn main() -> i32

并返回一个返回码(例如0,这意味着成功)

或者

pub unsafe extern "C" fn main() -> !

exit在 linux 上使用系统调用(或在嵌入式系统上使用无限循环)。


推荐阅读