引入Boost 库导致 lupdate 死循环问题

问题描述

  • 项目中引入了 boost 之后,会导致 lupdate 无法构建 ts 文件,进程无法结束,同时 CPU 占用率99% 以上,后台始终有 lupdate 进程,只能强制退出
  • 引入Boost 库导致 lupdate 死循环问题_第1张图片

排查路径

  1. CPU 占用率达 99% 以上,且进程不会退出,初步推测是 lupdate 进程死循环
  2. 通过 QT 目录下的 MaintenanceTool.app 程序安装 QT 源代码, 5.9目录下多了一个 Src 文件夹
  3. 发现其他人也有遇到这个问题,
    1. https://bugreports.qt.io/browse/QTBUG-27936
    2. https://stackoverflow.com/questions/40471662/update-translation-file-using-boost-library-qt-c
  4. 我们可以看到,这里存在两种解决方案:
    1. 直接将 boost 文件加入到 TR_EXCLUDE 参数中,不参与翻译字段的索引
    2. 修改 QT Creator 中 lupdate 源代码,去除搜索 INCLUDE_PATH 变量的步骤,改动代码部分为 qttools/src/linguist/lupdate/main.cpp 中的,

解决方案

  • 综上两个方案,方案一其实是属于临时性解决,如果后续有其他库也存在该问题,则需要重新添加,
  • 方案二直接移除 INCLUDE_PATH 的索引,大大提高 update 速度,因为移除了很多不必要的遍历,理论上也不会对多语言造成影响,因此推荐方案二解决
  • 附上已经编译好的 lupdate, 替换 QT 目录下的对应可执行文件即可: lupdate

你可能感兴趣的:(引入Boost 库导致 lupdate 死循环问题)