繁体   English   中英

Emscripten - 编译为 WASM 并在胶水代码中保留原始可调用 function 名称

[英]Emscripten - Compile to WASM and keep original callable function names in the glue code

使用 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)上,它曾经使用 output function 名称带有前缀 _ 即"_myFunctionA": myFunctionA


问:我可以给 emcc 编译器一个标志,强制它在生成的 JS 中保留我原来的 function 名称吗?

没有特定的标志可以关闭它,但目前内部标志-s EMITTING_JS=0会这样做(如果它认为它没有发出 JS,它不会缩小涉及 JS 的东西)。 然而,这个标志将来可能会改变——我们正在研究更好的标志来控制这一切。

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

使用 -g1 并将 -O2 添加到链接选项,例如:

add_link_options("$<$<CONFIG:RELEASE>:-O2>")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM