我有一个c++文件,其中包含一个只做数学运算的函数。
此函数接受一个数组作为参数,并将其所有结果保存回同一个数组中。
我可以用emscripten编译它,这会给我一个可以工作的js和wasm文件,但它生成的javascript中充满了我不需要的大量填充物。
如果我不想在数组中通过,我会做以下操作:
var bytes = .... // The bytes of the wasm file
var Module = new WebAssembly.Module(bytes);
var wasmInstance = new WebAssembly.Instance(Module);
var desiredFunction = instance.exports.desiredFunction;
然而,当我使用上面的前3行代码初始化wasm,然后尝试调用以下命令时:
var buffer = Module._malloc(array.length); //setup space in wasm memory
我收到一个错误,说"Module._malloc"不是函数。我还需要写什么代码才能让malloc ccwrap和ccall正常工作?
问题是Emscripten不是为编译非常小的程序而设计的。它是为编译大型代码库而设计的,因此它会自动将各种东西捆绑到生成的wasm和宿主JS文件中。
有一个问题讨论了将其添加为一个功能,即创建最小JS主机的能力。
还有其他更轻量级的编译C/C++的工具,比如webassembly,可能更适合您的需求。