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

使用act本地测试GitHub Actions时遭遇zlib链接错误求助

解决act本地测试GitHub Actions时CMake项目的zlib链接错误

错误原因分析

这个链接错误本质是链接顺序问题:libcurl依赖zlib,但链接器处理库的顺序不对,导致找不到inflateEnd符号。手动在CMAKE_CXX_FLAGS加-lz或者直接写target_link_libraries(myproject PUBLIC z)的方式,既没有正确处理依赖链的顺序,也可能让CMake无法识别系统zlib的正确路径。

解决方案

1. 使用CMake官方模块管理zlib依赖

放弃手动加-lz的方式,改用CMake内置的FindZLIB模块,它会自动处理库路径、链接顺序和跨平台兼容性:

# 查找zlib库,找不到会直接报错终止构建
find_package(ZLIB REQUIRED)

# 链接zlib的官方导入目标,CMake会自动处理所有依赖细节
target_link_libraries(myproject PUBLIC ZLIB::ZLIB)

如果你的项目同时依赖libcurl,同样用CMake的FindCURL模块管理,它会自动关联zlib依赖,无需手动重复配置:

find_package(CURL REQUIRED)
find_package(ZLIB REQUIRED)

target_link_libraries(myproject PUBLIC CURL::CURL ZLIB::ZLIB)

2. 对齐act与GitHub Actions的运行环境

act默认使用的Docker镜像可能和GitHub Actions官方Ubuntu镜像存在差异,导致依赖库版本不匹配。运行act时指定与工作流一致的官方镜像:

# 以Ubuntu 22.04为例,对应GitHub Actions的ubuntu-22.04环境
act -P ubuntu-latest=ghcr.io/catthehacker/ubuntu:act-22.04

3. 清理CMake缓存与构建目录

残留的CMake缓存可能导致依赖识别异常,在工作流中添加清理步骤:

- name: Prepare build environment
  run: |
    rm -rf build || true
    mkdir -p build

4. 优化系统依赖安装命令

你的现有安装命令已经包含zlib1g-dev和zlib1g,可以保留,但建议添加--no-install-recommends减少冗余包,避免环境干扰:

- name: Install dependencies
  run: |
    sudo apt-get update
    sudo apt-get install -y --no-install-recommends rapidjson-dev libcurl4-openssl-dev python3 python3-dev zlib1g-dev zlib1g cmake

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:07:32