Bonjour,

je galère pas mal sur emscripten, je précise que je suis sous windows 7 par obligation. J'arrive à compiler mon code c en wasm, mais par contre je n'arrive à le lire avec javascript.

Voici mon code :

code C :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
char * HelloWorld ()
{
    return "Hello World !";
}

Ligne de commande Emscripten :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
emcc hello.c -O2 -s ONLY_MY_CODE=1 -s WASM=1 -s SIDE_MODULE=1 -s EXPORTED_FUNCTIONS="['_HelloWorld']" -o hello.wasm

affichage wat du fichier wasm obtenu :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(module
  (type $t0 (func (result i32)))
  (type $t1 (func))
  (import "env" "memory" (memory $env.memory 256))
  (import "env" "memoryBase" (global $env.memoryBase i32))
  (func $_HelloWorld (export "_HelloWorld") (type $t0) (result i32)
    (get_global $env.memoryBase))
  (func $__post_instantiate (export "__post_instantiate") (type $t1)
    (set_global $g1
      (i32.add
        (get_global $env.memoryBase)
        (i32.const 16)))
    (set_global $g2
      (i32.add
        (get_global $g1)
        (i32.const 5242880))))
  (global $g1 (mut i32) (i32.const 0))
  (global $g2 (mut i32) (i32.const 0))
  (data (get_global $env.memoryBase) "Hello World !"))

Le javascript qui est censé appeler le fichier wasm :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
importObject = {};
 
fetch('hello.wasm').then(response =>
  response.arrayBuffer()
).then(bytes =>
  WebAssembly.instantiate(bytes, importObject)
).then(results => {
  console.log("loaded");
});
Message d'erreur:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Uncaught (in promise) TypeError: Import #0 module="env" error: module is not an object or function
Promise.then (async)
(anonymous) @ (index):9
Pouvez vous me dire s'il vous plait où est l'erreur dans mon code ?