我正在用emscripten编译一个稍微复杂的项目。 (至少比我在网络上找到的简单示例还要复杂。)首先,我构建所有单个的库和应用程序并将其归档(emar)。然后,将它们链接在一起成为最终的可执行文件。
在此项目中,函数指针用于事件处理程序的回调。当我将最终可执行文件与-O3链接时,它将剥离用于回调处理程序的函数,并且代码无法正常运行。
我可以通过在函数回调的定义中添加EMSCRIPTEN_KEEPALIVE来解决此问题。但是,我的项目是跨平台的,不仅仅支持Web部署。因此,这不是最佳解决方案。
有没有一种很好的方法可以将所有功能保留在一个特定的库中,同时仍在优化其余代码,因此我不必使用平台专有的术语来修改每个子项目/应用程序?>
答案 0 :(得分:0)
根据the Emscripten documentation,我认为LLVM内联了该函数,并且该函数已删除。
使该函数生效的另一种方法是将其添加到EXPORTED_FUNCTIONS
中。例如:
emcc -s EXPORTED_FUNCTIONS='["_function_1", "_function_2"]' ...other options...
请注意,列表中的所有功能都应以下划线作为前缀。