gpt4 book ai didi

rust - 用不同大小的类型调用 transmute

转载 作者:行者123 更新时间:2023-11-29 08:29:51 26 4
gpt4 key购买 nike

我正在尝试使用 cargo build 构建一个 Rust 项目,但出现此错误:

error[E0512]: transmute called with types of different sizes
|
90 | ::std::mem::transmute(tenv)
| ^^^^^^^^^^^^^^^^^^^^^
|
= note: source type: i32 (32 bits)
= note: target type: *mut traction::Environment<JNIPlatform<'a>, std::string::String> (64 bits)

中断的代码是这样的:

let tenv = env.get_field_unsafe(obj, JFieldID::from(field), jni::signature::JavaType::Primitive(jni::signature::Primitive::Int)).unwrap_alog().i().unwrap();
::std::mem::transmute(tenv)

我不了解 Rust,所以我只能猜测它的作用。

由于这是一个类型转换问题,我假设这与我的操作系统有关。克隆同一个存储库的其他人没有这样的问题(在 macOS 和 Windows 上)。我有 macOS Sierra 10.12.6。

另一个问题:transmute 如何知道将提供给它的变量转换成什么类型​​? ::std::mem::transmute(tenv) 只接受一个参数,那么它如何知道源类型和目标类型呢?

最佳答案

目标类型是一个指针,因此它是特定于体系结构的:32 位平台上为 32 位,64 位平台上为 64 位。 usizeisize 可用于这种情况。

如果不是您的代码,您应该在原始存储库上打开一个问题。

您可以尝试构建 32 位二进制文​​件,使用 rustup default stable-i686

how does transmute know what type to convert the variable that's given to it? ::std::mem::transmute(tenv) takes only one argument, so how does it know both the source type and the destination type?

Rust 从上下文中推断源和目标类型,与 Iterator::collect 的方式相同。

关于rust - 用不同大小的类型调用 transmute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46217914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com