使用-O3进行脚本剥离功能

时间:2018-11-26 22:57:51

标签: emscripten

我正在用emscripten编译一个稍微复杂的项目。 (至少比我在网络上找到的简单示例还要复杂。)首先,我构建所有单个的库和应用程序并将其归档(emar)。然后,将它们链接在一起成为最终的可执行文件。

在此项目中,函数指针用于事件处理程序的回调。当我将最终可执行文件与-O3链接时,它将剥离用于回调处理程序的函数,并且代码无法正常运行。

我可以通过在函数回调的定义中添加EMSCRIPTEN_KEEPALIVE来解决此问题。但是,我的项目是跨平台的,不仅仅支持Web部署。因此,这不是最佳解决方案。

有没有一种很好的方法可以将所有功能保留在一个特定的库中,同时仍在优化其余代码,因此我不必使用平台专有的术语来修改每个子项目/应用程序?

1 个答案:

答案 0 :(得分:0)

根据the Emscripten documentation,我认为LLVM内联了该函数,并且该函数已删除。

使该函数生效的另一种方法是将其添加到EXPORTED_FUNCTIONS中。例如:

emcc -s EXPORTED_FUNCTIONS='["_function_1", "_function_2"]'   ...other options...

请注意,列表中的所有功能都应以下划线作为前缀。