已知问题
本节告知您已知的“陷阱”。请记住,本节是(并且将永远是)不完整的。如有建议和修改意见,请随时贡献本指南。
目标特性
大多数目标特性问题出现在将启用目标特性的代码与禁用目标特性的代码混合时。如果要避免未定义的行为,建议使用一组通用的目标特性构建所有代码(包括标准库和导入的 crate)。
默认情况下,使用 -C target-feature
标志编译代码不会使用匹配的目标特性重新编译整个标准库和/或导入的 crate。因此,目标特性通常被认为是不安全的。在单独的函数上使用 #[target_feature]
会使该函数不安全。
示例
目标特性 | 问题 | 出现于 | 描述 | 详情 |
---|---|---|---|---|
+soft-float 和 -sse | 段错误和 ABI 不匹配 | x86 和 x86-64 | x86 和 x86_64 架构使用 SSE 寄存器(又名 xmm )进行浮点运算。使用软件模拟浮点数(“软浮点”)会禁用 xmm 寄存器的使用,但 Rust 核心库的部分(例如 std::f32 或 std::f64 )在编译时没有使用软浮点,并期望参数在 xmm 寄存器中传递。这会导致 ABI 不匹配。尝试使用禁用 SSE 编译也会导致相同的错误。 | #63466 |