Emscripten-编译为WASM并将原始可调用函数名称保留在粘合代码中

时间:2019-09-18 07:57:16

标签: javascript emscripten webassembly

使用Emscripten v 1.38.43,我正在编译C代码。出于优化的原因,我剥离了生成的JS粘合代码,并最小化了代码大小。

这样做的时候,我发现JS可调用对象的映射方式如下:

var asmLibraryArg = {
  "b": ___setErrNo,
  "j": _emscripten_get_heap_size,
  "i": _emscripten_memcpy_big,
  "h": _emscripten_resize_heap,
  "g": myFunctionA,
  "f": myFunctionB,
  "e": myFunctionC,
  "d": myFunctionD,
  "c": abortOnCannotGrowMemory,
  "a": DYNAMICTOP_PTR
};

使剥离后的JS难以维护。在较早的版本(1.38.8)上,它通常以前缀_即"_myFunctionA" : myFunctionA

输出函数名称。

问:我可以给emcc编译器一个标志,以强制其将我的原始函数名称保留在生成的JS中吗?

1 个答案:

答案 0 :(得分:1)

没有特定的标志可以将其关闭,但是当前内部标志-s EMITTING_JS=0可以做到这一点(如果它认为它没有发出JS,则不会缩小涉及JS的内容)。但是,此标志将来可能会更改-我们正在研究更好的标志来控制所有这些情况。

一种解决方法是使用较低的优化级别,因为这只能在-O3-Os及更高版本中完成。