使用 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>")