【问题标题】:Rust imports in wasm-pack code causing JS errorwasm-pack 代码中的 Rust 导入导致 JS 错误
【发布时间】:2021-09-17 16:58:05
【问题描述】:

我收到一个 JS 错误:Uncaught (in promise) TypeError: WebAssembly.instantiate(): Import #0 module="env" error: module is not an object or function

当我在 Chrome 开发工具中查看 wasm 文件时,我在顶部看到这样的导入语句:

(module
  (func $blst_hash_to_g2 (;0;) (import "env" "blst_hash_to_g2") (param i32 i32 i32 i32 i32 i32 i32))
  (func $blst_sign_pk2_in_g1 (;1;) (import "env" "blst_sign_pk2_in_g1") (param i32 i32 i32 i32))
  (func $blst_scalar_from_bendian (;2;) (import "env" "blst_scalar_from_bendian") (param i32 i32))
  (func $blst_sk_check (;3;) (import "env" "blst_sk_check") (param i32) (result i32))

是什么导致了这些导入语句?如何删除或修复它们?我可以看到它们是blst Rust 包的一部分,该包包含在blsttc 包中。 blst 包使用 bindgen 生成与 blst.h 的 FFI 绑定,所以可能与它有关?

这个Github repo 有代码。我正在使用 wasm-pack build --target=web

构建

【问题讨论】:

  • 据我了解,问题在于env 应该是,但不是由wasm-pack 生成的。如果构建工件损坏,这通常会发生在我身上,如果我在代码生成期间中止构建过程,就会发生这种情况。然后解决方案是运行cargo clean 以删除损坏的构建工件并从头开始重新构建整个项目。
  • 既然你有一个 C 依赖,你是用 emscripten 的最新 sdk 用CC=emcc wasm-pack build --target=web 构建的吗?我已经使用该命令成功构建了您的 github 存储库。
  • @glennsl Cargo clean 没用,但谢谢
  • @MathieuRene 它不适合我,即使使用最新的 emscripten 和 CC=emcc。 blst 包上的构建过程正在终止,并出现错误“错误:无法构建存档:部分太大”
  • emcc 2.0.25 rustc 1.53.0 wasm-pack 0.10.0 on ubuntu20.04 here,你的操作系统/组件版本是什么?

标签: rust webassembly wasm-pack rust-wasm rust-bindgen


【解决方案1】:

我通过切换到具有最新功能的 Ubuntu 20.04 解决了这个问题,现在它运行良好。我在 mac os 10.15.7 上。

【讨论】:

    猜你喜欢
    • 2021-09-16
    • 2020-01-10
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    • 2020-01-22
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多