我正在尝试使用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)
只接受一个参数,那么它如何知道源类型和目标类型?
答案 0 :(得分:1)
目标类型是指针,因此它的体系结构特定:32位平台上的32位,64位平台上的64位。在这种情况下,可以使用usize
和isize
。
如果它不是您的代码,则应在原始存储库中打开一个问题。
您可以尝试使用rustup default stable-i686
transmute
如何知道转换给它的变量的类型?::std::mem::transmute(tenv)
只接受一个参数,那么它如何知道源类型和目标类型?
Rust以与Iterator::collect
相同的方式从上下文中推断出源和目标类型。