Passer les fonctions JS à WASM
P粉081360775
P粉081360775 2024-03-29 14:26:05
0
1
359

Je lis un excellent livre sur WebAssembly et j'essaie d'apprendre à importer des fonctions JS sans utiliser de "code de colle" wasm.

Il s'agit d'un fichier C dans lequel 2 extern fonctions sont déclarées

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

J'ai ensuite compilé le code c dans c 代码编译为 wasm en suivant les instructions suivantes :

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

On m'a ensuite demandé d'écrire un script JS où 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))

J'ai une erreur :

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

L'objet importé que je montre ici est déjà une version modifiée de l'objet original (que vous pouvez trouver ici). Dans cet exemple, la fonction est déclarée en JS comme _jsClearRect(),但模块找不到 jsClearRect() 的定义。然后它找不到 __memory_base 的定义,因为它被声明为 memoryBase 但现在我不知道 Object 的国王代表 GOT.mem​​ .

J'ai regardé autour de moi et j'ai l'impression d'utiliser une ancienne API mais je ne trouve pas de solution adaptée pour y parvenir.

Ma question est donc :

Comment importer des fonctions Javascript dans le module wasm ?

P粉081360775
P粉081360775

répondre à tous(1)
P粉276876663

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

Cela devrait simplifier/réduire les importations que vous devez fournir. (Par exemple, vous n'avez pas besoin de fournir tablememory).

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal