Lulus fungsi JS ke WASM
P粉081360775
P粉081360775 2024-03-29 14:26:05
0
1
350

Saya sedang membaca buku hebat tentang WebAssembly dan saya cuba belajar cara mengimport fungsi JS tanpa menggunakan "kod gam" wasm.

Ini ialah fail C di mana 2 extern fungsi diisytiharkan

extern int jsClearRect();
extern int jsFillRect();

Saya kemudian menyusun kod c ke dalam c 代码编译为 wasm menggunakan arahan berikut:

emcc src/main.c -Os -s STANDALONE_WASM=1 -s SIDE_MODULE=1  -o main.wasm

Saya kemudian diarahkan untuk menulis skrip JS di mana instantiate wasm文件,定义jsFillRect()jsClearRect()并使用导入对象将它们导入到模块的env.

// define the import Objects
const importObj = {
    "env": {
        "__memory_base":0,
        "tableBase":0,
        "memory": new WebAssembly.Memory({ initial: 256 }),
        "table": new WebAssembly.Table({ initial: 8, element: 'anyfunc' }),
        jsClearRect(): function() {/*function definition here*/},
        jsFillRect(): function() {/*function definition here*/},
    }
}
// import the module
fetch('main.wasm')
        .then(obj => WebAssembly.instantiateStreaming(obj,importObject))
        .then(result => console.log(result))
        .catch(err => console.log(err))

Saya mendapat ralat:

TypeError: import object field 'GOT.mem' is not an Object

Objek import yang saya tunjukkan di sini sudah pun versi diubah suai bagi objek asal (yang boleh anda temui di sini). Dalam contoh ini, fungsi diisytiharkan dalam JS sebagai _jsClearRect(),但模块找不到 jsClearRect() 的定义。然后它找不到 __memory_base 的定义,因为它被声明为 memoryBase 但现在我不知道 Object 的国王代表 GOT.mem​​ .

Saya telah melihat sekeliling dan berasa seperti saya menggunakan API lama, tetapi saya tidak dapat mencari penyelesaian yang sesuai untuk mencapai perkara ini.

Jadi soalan saya ialah:

Bagaimana untuk mengimport fungsi Javascript ke dalam modul wasm?

P粉081360775
P粉081360775

membalas semua(1)
P粉276876663

GOT.mem​​ 来自 emscripten 使用的动态链接 ABI。在这种情况下,我认为您不需要动态链接内容,您可以/应该删除 -sSIDE_MODULE.

Ini seharusnya memudahkan/mengurangkan import yang perlu anda sediakan. (Sebagai contoh, anda tidak perlu menyediakan tablememory).

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan