このクレートのラッパーをwasmに移植しようとしています。私の現在のツールチェーンは次のとおりです。
ビルドシステムに関するもう少し情報:
私の錆びた木枠(--lib
木枠です)では、私はと呼ぶだけwasm-pack build --target browser
です。これにより、pkg
wasmblobと関連するjsファイルを含むフォルダーが作成されます。ここにコンパイラからの苦情はありません。
次に、内部pkg
でnpm link
(1回だけ)実行します。
次に、cargo generate --git https://github.com/rustwasm/wasm-pack-template
必要なWebアプリの定型文を作成します。このコマンドで生成されたフォルダー内で、実行npm link schnorrkel-js
して表示します。npm run start
webpack開発サーバーを実行します。
単純な計算関数のバインドやアラートなどの初期テストは正常に機能します。
上記のクレート(例)からいくつかの(どれも)関数を使い始めると、すべてが壊れます。残念ながら、私が受け取るエラーメッセージは非常に有益ではなく、まったく役に立ちません。
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)
)
残りのセットアップ手順は、Rust andWebassemblyブックから直接実行されます。
Cargo.toml
[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)
}
ここで説明したように、これはclear_on_drop
依存関係で使用されるCコードの問題である可能性があるようです。
クレートでnightly
機能を有効にしてみてください。これにより、Cの使用を無効にschnorrkel
するnightly
機能が有効になりclear_on_drop
ますCargo.toml
。
[dependencies]
wasm-bindgen = "0.2"
schnorrkel = { git = "https://github.com/w3f/schnorrkel.git", features = ["nightly"] }
または、コンパイルされたバイナリでwasm2wat
(オンラインバージョンがあります)を使用して、.wasm
どのenv
インポートが失敗しているかを調べることができます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加