已知问题
本节介绍已知的“陷阱”。请记住,本节是(并且将永远是)不完整的。对于建议和修改,请随时为本指南做出贡献。
目标特性
大多数目标特性问题出现在将启用目标特性的代码与禁用目标特性的代码混合时。如果您想避免未定义的行为,建议使用一组通用的目标特性来构建所有代码(包括标准库和导入的板条箱)。
默认情况下,使用-C target-feature
标志编译代码不会使用匹配的目标特性重新编译整个标准库和/或导入的板条箱。因此,目标特性通常被认为是不安全的。在单个函数上使用#[target_feature]
会使该函数不安全。
示例
目标特性 | 问题 | 出现于 | 描述 | 详情 |
---|---|---|---|---|
+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 |