在 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 中奇怪地崩溃。仔细检查了我的启动程序集 - 那里似乎没有错误。
最佳答案
write!(writer, "format {}", "1").unwrap();
我认为这不会帮助您解决问题,但是当我遇到类似问题时 write!
只会打印 str 参数。如果您能找到将 i32 转换为 str 的 #![no_std] 函数,那么这可能会帮助您完成您要执行的操作。
关于rust - Write::write_fmt 在裸机上不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30639543/