0

在 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) 谢谢。

4

1 回答 1

1

问题是你的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 上使用系统调用(或在嵌入式系统上使用无限循环)。

于 2019-12-19T12:55:10.000 回答