在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
其中{arch}
分别为x86_64
或aarch64
。
我的代码是使用相同的代码生成选项构建的。 libcore版本对应于我的编译器。有问题的代码是here。你能说出问题的可能原因吗?
重要更新:
Here是更精简的代码。 libcore是在项目中构建的,因此一切都在掌控之中。上面的循环来自机器重启。代码完全适用于aarch64,但奇怪的是在x86_64上的Write :: write_fmt内崩溃。仔细检查我的启动装配 - 似乎没有错误。
答案 0 :(得分:0)
write!(writer, "format {}", "1").unwrap();
我认为这不会帮助您解决问题,但是当我遇到类似问题时,write!
只会打印 str 参数。如果您能找到将 i32 转换为 str 的 #![no_std] 函数,那么这可能会帮助您完成您要执行的操作。