You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions中CMake构建Boost项目报Could NOT find Boost错误

问题场景

在GitHub Actions工作流中构建CMake项目时,本地Ubuntu 22.04 LTS环境、同版本基础镜像的Docker容器内均可正常完成构建,但使用GitHub Actions官方ubuntu-22.04运行器时构建失败。

报错信息

CMake Error at /usr/local/share/cmake-3.23/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find Boost (missing: Boost_INCLUDE_DIR system filesystem thread
  date_time chrono regex serialization program_options)
Call Stack (most recent call first):
  /usr/local/share/cmake-3.23/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
  /usr/local/share/cmake-3.23/Modules/FindBoost.cmake:2376 (find_package_handle_standard_args)
  CMakeLists.txt:261 (find_package)

相关配置

GitHub Actions工作流配置

install:
    name: Install Dependencies
    runs-on: ubuntu-22.04
    needs: [ clean ]
    steps:
      - uses: actions/checkout@v2

      - name: Install General
        run: |
          sudo apt-get update
          sudo apt-get install -y build-essential libboost-all-dev libssl-dev libffi-dev python3-dev gcc-11 g++-11 git cmake librocksdb-dev cron rpcbind libboost-system1.74.0 libboost-filesystem1.74.0 libboost-thread1.74.0 libboost-date-time1.74.0 libboost-chrono1.74.0 libboost-regex1.74.0 libboost-serialization1.74.0 libboost-program-options1.74.0 libicu70

  build:
    name: Build Target
    runs-on: ubuntu-22.04
    needs: [ install ]
    steps:
      - uses: actions/checkout@v2

      - name: Create Build Dir
        run: mkdir build
      - name: CMake
        run: cmake -DCMAKE_CXX_FLAGS="-g0 -Os -fPIC -std=gnu++17" -DBoost_DEBUG=ON -DBoost_ARCHITECTURE=-x64 ..
        working-directory: build
      - name: Make
        run: make -j$(nproc) --ignore-errors
        working-directory: build

项目中Boost相关CMake配置

set(Boost_NO_BOOST_CMAKE ON)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_STATIC_RUNTIME ON)
find_package(Boost REQUIRED COMPONENTS system filesystem thread date_time chrono regex serialization program_options)
message(STATUS "Boost Found: ${Boost_INCLUDE_DIRS}")
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})

可正常构建的Dockerfile配置

FROM ubuntu:22.04

COPY . /usr/src/project_name
WORKDIR /usr/src/project_name

# install build dependencies
RUN apt-get update && \
    apt-get install -y \
      build-essential \
      libssl-dev \
      libffi-dev \
      python3-dev \
      gcc-11 \
      g++-11 \
      git \
      cmake \
      librocksdb-dev \
      libboost-all-dev \
      libboost-system1.74.0 \
      libboost-filesystem1.74.0 \
      libboost-thread1.74.0 \
      libboost-date-time1.74.0 \
      libboost-chrono1.74.0 \
      libboost-regex1.74.0 \
      libboost-serialization1.74.0 \
      libboost-program-options1.74.0 \
      libicu70

# create the build directory
RUN mkdir build
WORKDIR /usr/src/project_name/build

# build and install
RUN cmake -DCMAKE_CXX_FLAGS="-g0 -Os -fPIC -std=gnu++17" .. && make -j$(nproc) --ignore-errors

WORKDIR /usr/src/project_name/build/src
故障原因
  • 核心原因:GitHub Actions中每个配置了runs-on的Job都会运行在独立的临时虚拟机实例上,Job执行完成后实例会直接销毁,不同Job之间不共享系统环境、已安装软件包。当前配置把依赖安装放在独立的install Job中,后续build Job启动时是完全干净的系统环境,根本没有安装Boost等依赖,自然无法找到Boost头文件和库文件。本地和Docker环境能正常构建,正是因为依赖安装和编译步骤在同一个持续运行的环境中执行,不存在环境隔离问题。
  • 次要干扰项:CMake命令中添加的-DBoost_ARCHITECTURE=-x64参数会干扰FindBoost模块的默认搜索逻辑,强制模块搜索带-x64后缀的Boost库文件,而Ubuntu源安装的原生Boost库没有该后缀,会进一步提升搜索失败概率。
  • 冗余配置:依赖安装列表中单独列出的libboost-system1.74.0等运行时包,会在安装libboost-all-dev时作为依赖自动安装,不需要重复指定,不会直接导致报错但属于无效配置。
修复方案
  • 移除独立的install Job,将依赖安装步骤直接移动到build Job的步骤最前端,和后续CMake、编译步骤在同一个Job实例中执行,保证安装的依赖可以被编译流程直接读取。如果确实需要拆分Job减少重复执行时间,需要通过缓存动作持久化系统依赖,但对于apt安装的系统包,直接在同Job安装是稳定性最高的方案。
  • 删除CMake执行命令中的-DBoost_ARCHITECTURE=-x64参数,使用默认的架构检测逻辑搜索系统安装的Boost库。
  • 清理apt安装列表中冗余的Boost运行时包条目,仅保留libboost-all-dev即可覆盖所有需要的Boost组件。
  • 若调整后仍有搜索问题,可在CMake步骤前添加ls /usr/include/boost命令,验证Boost头文件是否确实安装到了默认系统路径。

内容的提问来源于stack exchange,提问作者user16891224

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 19:27:30