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



使用 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 中?

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新