在x86_64体系结构上,write!
宏使用字符串参数按预期工作,但不使用整数.当使用整数参数时,我得到一个奇怪的循环(例如write!(writer, "Hello {}!", 123)
产生无限的"Hello Hello Hello ...").在aarch64上,write!
宏根本不起作用.
我使用以下命令构建libcore:
rustc -C opt-level=3 -Z no-landing-pads -C no-stack-check \
--crate-type rlib --target {arch}-unknown-linux-gnu lib.rs
Run Code Online (Sandbox Code Playgroud)
{arch}
分别在哪里x86_64
或aarch64
.
我的代码使用相同的代码生成选项构建.libcore版本对应于我的编译器.有问题的代码在这里.你能说出问题的可能原因吗?
重要更新:
这是更精简的代码.libcore是在项目中构建的,因此一切都在掌控之中.上面的循环来自机器重启.代码完全适用于aarch64,但奇怪的是在x86_64上的Write :: write_fmt内崩溃.仔细检查我的启动程序集 - 似乎没有错误.
小智 0
write!(writer, "format {}", "1").unwrap();
Run Code Online (Sandbox Code Playgroud)
我认为这不会帮助您解决问题,但是当我遇到类似的问题时write!
只会打印 str 参数。如果您可以找到将 i32 转换为 str 的 #![no_std] 函数,那么这可能会帮助您完成您想要做的事情。