我正在尝试将wrapper for this crate移植到wasm中。我当前的工具链是:
有关构建系统的更多信息:
在我的防 rust crate (即
--lib
crate )中,我仅调用wasm-pack build --target browser
。这将创建一个pkg
文件夹,其中包含wasm blob和相关的js文件。这里没有来自编译器的投诉。然后,在
pkg
内部,我运行npm link
(仅一次)。然后,
cargo generate --git https://github.com/rustwasm/wasm-pack-template
创建所需的Web应用程序样板。在此命令生成的文件夹内,我运行npm link schnorrkel-js
以使其可见。 npm run start
运行webpack开发服务器。初始测试(如绑定(bind)简单的计算功能和警报)可以正常工作。
当我开始使用提到的 crate (example)中的某些功能(而不是任何)时,一切都中断了。不幸的是,我收到的错误消息非常无用,根本没有帮助:
Entrypoint main = bootstrap.js
[../pkg/schnorrkel_js.js] 3.53 KiB {0} [built]
[../pkg/schnorrkel_js_bg.wasm] 93.7 KiB {0} [built]
+ 27 hidden modules
ERROR in ../pkg/schnorrkel_js_bg.wasm
Module not found: Error: Can't resolve 'env' in '.../schnorrkel-js/pkg'
@ ../pkg/schnorrkel_js_bg.wasm
@ ../pkg/schnorrkel_js.js
@ ./index.js
@ ./bootstrap.js
@ multi (webpack)-dev-server/client?http://localhost:8080 ./bootstrap.js
这是什么原因造成的?我强烈猜测某些基本功能不是可移植到wasm的,而是到底哪一个,为什么以及错误消息试图说的是什么?
笔记:
rustc 1.34.0-nightly (d17318011 2019-02-07)
)[package]
name = "schnorrkel-js"
edition = "2018"
[lib]
crate-type = ["cdylib"]
[dependencies]
wasm-bindgen = "0.2"
schnorrkel = { git = "https://github.com/w3f/schnorrkel.git" }
示例代码:
#[wasm_bindgen]
pub fn verify(signature: &[u8], message: &[u8], pubkey: &[u8]) -> bool {
let sig = match Signature::from_bytes(signature) {
Ok(some_sig) => some_sig,
Err(_) => return false
};
let pk = match PublicKey::from_bytes(pubkey) {
Ok(some_pk) => some_pk,
Err(_) => return false
};
// works up until here if I return a boolean.
// calling this breaks everything.
pk.verify_simple(SIGNING_CTX, message, &sig)
}
最佳答案
如here所述,看来这可能是clear_on_drop
依赖项所使用的C代码的问题。
尝试启用nightly
crate 上的schnorrkel
功能,这又会启用nightly
上的clear_on_drop
功能,从而禁用C的用法。在您的Cargo.toml
上:
[dependencies]
wasm-bindgen = "0.2"
schnorrkel = { git = "https://github.com/w3f/schnorrkel.git", features = ["nightly"] }
另外,您可以在编译后的
wasm2wat
二进制文件上使用.wasm
(存在an online version)来检查哪些env
导入失败。关于webpack - Rust/Wasm : Module not found: Error: Can't resolve 'env' in,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54598317/