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

问题描述

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

watfile.wat

final

cfile.c

(module
  (func $addwat (param $p1 i32) (param $p2 i32) (result i32)
    local.get $p1     
    local.get $p2 
    i32.add 
  )
  (export "addwat" (func $addwat))
)
#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 );
}

我可以强制所有内容进行链接,但是检查链接输出后,符号会丢失。链接到多个wasm文件的正确方法是什么?还是更好-怎么可能从脚本化的C文件链接到wasm文件

编辑: 只是要注意,您似乎不能使用wasm-ld将脚本输出的WASM链接在一起,而不会牺牲脚本购买的所有内容。即它需要可重定位的文件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] ,但只有在编译侧模块-s RELOCATABLE=1时,您才能这样做,这意味着您丢失了-s SIDE_MODULE=1

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)