我正在用emscripten编译一个稍微复杂的项目。(至少比我在网上找到的简单例子更复杂。)首先,我构建所有单独的库和应用程序并将它们存档(emar)。然后,它们被链接在一起成为最终的可执行文件。
在此项目中,函数指针用于事件处理程序上的回调。当我将最终的可执行文件与-O3链接时,它正在剥离用于回调处理程序的函数,并且代码不能正常运行。
我可以通过将EMSCRIPTEN_KEEPALIVE添加到函数回调的定义中来修复此问题。但是,我的项目是跨平台的,支持的不仅仅是web部署。所以这不是最好的解决方案。
有没有一种好的方法可以只将所有函数保存在一个特定的库中,同时仍然优化其余的代码,这样我就不必用特定于平台的术语修改每个单独的子项目/应用程序?
发布于 2018-12-04 20:04:47
根据the Emscripten documentation的说法,我认为LLVM内联了这个函数,而这个函数被删除了。
另一种激活函数的方法是将其添加到EXPORTED_FUNCTIONS中。例如:
emcc -s EXPORTED_FUNCTIONS='["_function_1", "_function_2"]' ...other options...请注意,列表中的所有函数都应以下划线作为前缀。
https://stackoverflow.com/questions/53490376
复制相似问题