我試圖建立與cargo build
防鏽項目,但我得到這個錯誤:蛻變調用類型的不同大小的
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)
只接受一個參數,那麼它如何知道源類型和目標類型?
在代碼中是否有任何快速修復?也許指定某處'64'而不是'32'或反之亦然? – octavian
嘗試構建一個32位二進制文件:使用rustup默認的stable-i686。 你當然可以改變:: std :: mem :: transmute(tenv):: std :: mem :: transmute(tenv as i64),但是IDK如果是有效的:D –
運行'rustup默認穩定-i686'導致這個'線程'主'恐慌在'無法找到libclang:'\ libclang \'共享庫無法打開:/usr/local/opt/llvm/lib/libclang.dylib「 – octavian