Linux下Unreal Engine Release构建中boost::asio协程Timer不触发问题
Unreal Engine 5.7 Linux Release构建中boost::asio协程Timer挂起问题解决
问题现象
使用Unreal Engine 5.7开发游戏时,Windows平台的Debug、Release构建均可正常运行;但Linux平台下,仅纯Release构建出现异常:boost::asio网络模块的协程在co_await处挂起,Timer无法触发输出预期的Hello World日志。而Linux的Debug构建、带调试信息的Release构建均无此问题。
问题触发场景为:从依赖库中调用触发co_spawn的函数,或在Unreal项目中直接通过co_spawn调用协程时。
排查过程
针对问题进行了多轮调试尝试:
- 给依赖库添加
-fno-inline编译选项:Debug构建中Timer可正常触发,但Shipping构建仍无法工作 - 设置
OptimizeCode = CodeOptimization.Never并配合-fno-inline:Shipping构建中Timer恢复正常触发 - 统一使用Unreal构建模块的编译选项:问题依旧存在
- 采用源码构建方式,给依赖库和Unreal项目都添加
-fno-inline:问题得到解决
最终解决方案
将所有boost::asio相关代码迁移至依赖库内部,让Unreal项目完全不需要感知boost::asio的存在,此操作后问题彻底解决。
附相关参考文件
- 最小复现代码
- Debug/Release构建日志
- 系统环境信息
内容的提问来源于stack exchange,提问作者Koronis Neilos
相关产品推荐
相关产品推荐

