如何在 emscripten 中将多个 wasm 文件链接在一起?(不只是C)

Cha*_*ohr 7 javascript c emscripten webassembly

我正在尝试使用 emscripten 将 .c 文件和 .wat 文件链接在一起,以便我可以从 c 调用本机 WebAssembly 函数。我尝试了几种方法,但似乎都不起作用。例如,如果我尝试这样的事情:

wat文件.wat

(module
  (func $addwat (param $p1 i32) (param $p2 i32) (result i32)
    local.get $p1     
    local.get $p2 
    i32.add 
  )
  (export "addwat" (func $addwat))
)
Run Code Online (Sandbox Code Playgroud)

c文件

#include <emscripten.h>

int addwat( int a, int b );
int add2( int a, int b )
{
    return a+b;
}
int add2cwat( int a, int b )
{
    return addwat( a, b );
}
Run Code Online (Sandbox Code Playgroud)
wat2wasm -r watfile.wat
emcc -o cfile.wasm cfile.c watfile.wasm -s EXPORTED_FUNCTIONS='["_add2","_add2cwat"]' -s EXPORTED_RUNTIME_METHODS='["ccall","cwrap"]' -s ERROR_ON_UNDEFINED_SYMBOLS=0 -s ASYNCIFY=1 -s EXPORT_ALL=1 -s SIDE_MODULE=1
emcc -o c-test.wasm cfile.wasm watfile.wasm  -s EXPORTED_FUNCTIONS='["_add2wat","_add2","_add2cwat"]' -s ASYNCIFY=1 -s EXPORT_ALL=1 --no-entry -s STANDALONE_WASM=1
emcc: error: undefined exported function: "_add2" [-Wundefined] [-Werror]
Run Code Online (Sandbox Code Playgroud)

我可以强制所有内容链接,但检查链接的输出时,符号会丢失。链接到多个 wasm 文件的正确方法是什么?或者更好的是 - 如何从 emscripten'd C 文件链接到 wasm 文件?

编辑:请注意,您似乎无法使用 wasm-ld 将 emscripten 输出的 WASM 链接在一起,而不牺牲 emscripten 为您购买的所有内容。即它需要可重定位的文件-s RELOCATABLE=1,但如果你只是编译一个侧面模块,你只能 -s SIDE_MODULE=1这样做,这意味着你输了_start