c语言 - 有没有一种简单的方法可以要求emscripten emit wasm而不是篡改它的名字?



这是我的C代码:

#include <emscripten.h>
#ifdef __cplusplus
extern "C" {
#endif
EMSCRIPTEN_KEEPALIVE int add(int a, int b) {
return a + b;
}
#ifdef __cplusplus
}
#endif

我用这样的命令运行它:emcc -O3 add.c -s EXPORTED_FUNCTIONS=_add,它给出我的wasm输出接近我想要的,但名称被篡改了,转储的输出如下所示:


Type[2]:
- type[0] () -> nil
- type[1] (i32, i32) -> i32
Function[2]:
- func[0] sig=0 <b>
- func[1] sig=1 <c>
Table[1]:
- table[0] type=funcref initial=1 max=1
Memory[1]:
- memory[0] pages: initial=256 max=256
Export[4]:
- memory[0] -> "a"
- func[0] <b> -> "b"
- func[1] <c> -> "c"
- table[0] -> "d"
Code[2]:
- func[0] size=3 <b>
- func[1] size=7 <c>

这里c是被篡改的add,有什么方法可以告诉emcc不要篡改它的名称吗?

emscripten输出的JS库将导出未处理的名称,以便您仍然可以在外部使用。

为了节省空间,从wasm导出到JS的名称被缩小了,但JS知道然后用它们的原始名称将它们导出到外部。您可以将WebAssembly的这些导出视为JS和emscripten生成的WebAssembly之间的内部契约。它们不是为您直接访问而设计的。

如果你想让emscripten生成一个设计用于直接/外部消费的WebAssembly模块,而不想让emscripten生成JS加载程序代码,你可以使用以下方法之一输出一个独立的wasm文件:

  • 指定以.wasm结尾的输出名称(例如-o out.wasm(
  • 通过-sSTANDALONE_WASM

在此模式下,您不应看到名为minimied的导出。

相关内容

  • 没有找到相关文章

最新更新