Tengo problemas con un error al compilar WASM, incluida la biblioteca cmath.
Lo que debo hacer es poder usar la función sqrt en JavaScript... Si elimino la función sqrt y la biblioteca cmath, todo funciona bien... ¿Puede alguien ayudarme a entender qué estoy haciendo mal?
Aquí el código C++:
#include <cmath> extern "C" { int Sum(int a, int b) { return a + b; } int sub (int a, int b){ return a - b; } double root (int a){ return sqrt(a); } }Esto es lo que ejecuto en la terminal para generar el archivo WASM
em++ -std=c++2b "PATH_TO_CPP_FILE" -Oz -s WASM=1 -s SIDE_MODULE=1 -s BINARYEN_ASYNC_COMPILATION=0 -o "PATH_TO_A_FOLDER\FILENAME.wasm"Este es el código JavaScript que estoy usando:
const importObject = { module: {}, env: { memory: new WebAssembly.Memory({ initial: 256 }), } }; WebAssembly.instantiateStreaming( fetch('main.wasm'), importObject ).then(result => { const Sum = result.instance.exports.Sum; const sub = result.instance.exports.sub; console.log(Sum(4, 5)); console.log(Sum(10, 10)); console.log(sub(20, 10)); });Finalmente este es el error que estoy teniendo actualmente:
Uncaught (in promise) LinkError: WebAssembly.instantiate(): Import #0 module="env" function="_Z4sqrtIiENSt3__29enable_ifIXsr3std11is_integralIT_EE5valueEdE4typeES2_" error: function import requires a callable