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

GitHub Actions中Ubuntu24.04模拟arm64时GCC崩溃,无法构建gem原生扩展

解决Ubuntu 24.04下QEMU构建arm64 Rails Docker镜像的GCC段错误问题

问题根源

Ubuntu 24.04默认搭载的GCC 13.x版本,在QEMU模拟arm64架构的环境中存在兼容性bug,导致编译Ruby gem原生扩展时触发GCC内部段错误。这个问题不特定于某款gem(msgpack、pg都出现),而是编译环境层面的问题——回退到Ubuntu 22.04(GCC 11.x)就能正常构建,也验证了这一点。

可行解决方案

1. 直接回退到Ubuntu 22.04(最省心的临时方案)

在GitHub Actions workflow文件里,把runner从ubuntu-latest明确指定为ubuntu-22.04,这是已经验证有效的方案:

jobs:
  build:
    runs-on: ubuntu-22.04
    # 后续构建步骤...

2. 在Dockerfile中针对arm64降级GCC版本

如果必须使用Ubuntu 24.04,可以在Dockerfile中为arm64架构单独安装旧版GCC(比如12.x),并设置为默认编译器:

# 安装依赖时加入GCC 12(仅arm64生效)
RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential gcc-12 g++-12 \
    && if [ "$(dpkg --print-architecture)" = "arm64" ]; then \
        # 将gcc-12设为默认编译器
        update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100 \
        && update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100; \
    fi

# 之后正常执行bundle install等步骤
RUN bundle install --jobs 4 --retry 3

3. 更新QEMU版本尝试修复兼容性

在GitHub Actions中使用最新版的QEMU镜像,可能修复与新版GCC的交互问题:

- name: Set up QEMU
  uses: docker/setup-qemu-action@v3
  with:
    image: tonistiigi/binfmt:latest

补充说明

如果后续Ubuntu官方或QEMU团队修复了这个兼容性bug,就可以换回ubuntu-latest。在此之前,优先用方案1或方案2解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:46:08