Rust生成对_truncfsf2的调用,它声称不支持该调用?
我正在为一台Atmega328写一些防锈代码。我知道它没有内置对浮点的支持,所以我需要提供一些我想要使用的浮点例程的软实现,比如在中找到的那些。但是,即使包含了编译器内置项,我也会得到以下结果:Rust生成对_truncfsf2的调用,它声称不支持该调用?,rust,arduino,embedded,llvm,Rust,Arduino,Embedded,Llvm,我正在为一台Atmega328写一些防锈代码。我知道它没有内置对浮点的支持,所以我需要提供一些我想要使用的浮点例程的软实现,比如在中找到的那些。但是,即使包含了编译器内置项,我也会得到以下结果: quaternion.rs:54: undefined reference to `__truncdfsf2' 查看编译器内置的页面,我发现没有计划支持\uuuu truncfsf2,因为它“显然涉及到Rust不支持的浮点类型(“f128”、“f80”和复数)。” 有人能帮我理解为什么Rust/LLV
quaternion.rs:54: undefined reference to `__truncdfsf2'
查看编译器内置的页面,我发现没有计划支持\uuuu truncfsf2
,因为它“显然涉及到Rust不支持的浮点类型(“f128”、“f80”和复数)。”
有人能帮我理解为什么Rust/LLVM似乎在生成Rust显然不支持的调用吗?有办法解决这个问题吗
这是我的target.json供参考
{
"arch": "avr",
"atomic-cas": false,
"cpu": "atmega328",
"data-layout": "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8",
"eh-frame-header": false,
"exe-suffix": ".elf",
"executables": true,
"late-link-args": {
"gcc": [
"-lgcc"
]
},
"linker": "avr-gcc",
"linker-is-gnu": true,
"llvm-target": "avr-unknown-unknown",
"max-atomic-width": 8,
"no-default-libraries": false,
"no-compiler-rt": true,
"target-c-int-width": "16",
"target-pointer-width": "16",
"pre-link-args": {
"gcc": [
"-mmcu=atmega328",
"-Wl,--as-needed"
]
},
"vendor": "unknown",
"os": "none",
"target-endian": "little"
}
我对生锈知之甚少,但在我看来,你们正试图用只支持AVR芯片上ARM内核的工具链来做些什么。Atmega328(和AVR芯片)不使用gcc,而是使用AVR gcc。对于AVR,有一个支持AVR芯片上的锈迹叉。顺便说一句,AVR芯片(包括Arduino)通过添加构建标志
-Wl,-u,vfprintf-lprintf\u flt-lm
来支持浮点。有关更多详细信息,请参阅文档。它在Arduino上额外占用1kB的闪存。