Hi all,
Just started learning rust and wasm not too long ago so feel free to challenge the premise of this question if what I am doing is unreasonable to begin with.
As titled, I am running into an UnknownImport error when trying to invoke a exported function from a WASM module that is compiled from a crate that declares external dependency.
I have a WASM module that is compiled using wasm-pack build
from the following crate:
src/lib.rs
:
use random_number::random;
#[no_mangle]
pub fn add_one(operand: i32) -> i32 {
let n: i32 = random!();
operand + n
}
Cargo.toml
:
[package]
name = "ttt"
version = "0.1.0"
edition = "2021"
[lib]
crate-type = ["cdylib", "lib"]
[dependencies]
wasm-bindgen = "0.2"
random-number = "0.1.7"
getrandom = { version = "0.2", features = ["js"] }
The directory of crate/pkg/
looks like this after running wasm-pack build
:
pkg
├── package.json
├── ttt.d.ts
├── ttt.js
├── ttt_bg.js
├── ttt_bg.wasm
└── ttt_bg.wasm.d.ts
Then I tried invoking this add_one function from another crate, the main function of which looks like the following:
use std::error;
use wasmer::{imports, wat2wasm, Instance, Module, NativeFunc, Store};
fn main() -> Result<(), Box<dyn error::Error>> {
let wasm_bytes = std::fs::read(".../ttt/pkg/ttt_bg.wasm")?;
let store = Store::default();
let module = Module::new(&store, wasm_bytes)?;
let import_object = imports! {};
let instance = Instance::new(&module, &import_object)?;
let add_one: NativeFunc<i32, i32> = instance.exports.get_function("add_one")?.native()?;
println!("calling add one func...");
let result = add_one.call(2)?;
println!("The reuslt is: {}", result);
Ok(())
}
Upon running, I get the following error:
Error: Link(Import("./ttt_bg.js", "__wbg_randomFillSync_91e2b39becca6147", UnknownImport(Function(FunctionType { params: [I32, I32, I32], results: [] }))))
This looks like it's complaining about an indirect dependency not being accessible when the WASM export function is invoked. Am I correct in that? If so, what is the proper way of exporting the function? Or am I compiling the WASM wrong?
Thanks a lot in advance.