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