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

为Apache IoTDB构建跨架构Snap:openjdk架构匹配异常求助

问题分析与解决方案

你遇到的问题核心在于:在arm64宿主环境(M2 Mac上的Ubuntu 22.04 arm64虚拟机)交叉构建amd64架构Snap时,stage-packages默认拉取了宿主架构的OpenJDK包,导致两种架构的Snap中均只存在arm64版本的JDK路径。以下是具体解决步骤:

解决步骤

  • 更新snapcraft到最新稳定版
    旧版本snapcraft在跨架构stage-packages处理上存在缺陷,先执行更新:

    sudo snap refresh snapcraft --channel=latest/stable
    
  • 开启Ubuntu虚拟机的multiarch支持
    在arm64的Ubuntu系统中添加amd64架构的软件包支持:

    sudo dpkg --add-architecture amd64
    sudo apt update
    
  • 在snapcraft.yaml中明确指定架构匹配的OpenJDK包
    利用snapcraft内置的${SNAPCRAFT_ARCH_TRIPLET}变量,让不同架构构建时拉取对应版本的包,修改stage-packages配置:

    stage-packages:
      - openjdk-11-jre-headless:${SNAPCRAFT_ARCH_TRIPLET}
    

    这样构建arm64时会拉取openjdk-11-jre-headless:arm64,构建amd64时拉取openjdk-11-jre-headless:amd64。

  • 调整架构构建配置(可选,针对交叉构建异常场景)
    若交叉构建仍有问题,可改为分架构单独构建,修改architectures配置:

    architectures:
      - build-on: arm64
        build-for: arm64
      - build-on: amd64
        build-for: amd64
    

    此时在arm64虚拟机上构建amd64架构时,snapcraft会自动通过QEMU模拟amd64环境,确保拉取对应架构的软件包。

  • 验证构建结果
    构建完成后,分别解压两种架构的Snap包检查JDK目录:

    # 检查arm64包
    unsquashfs -d arm64-snap your-iotdb-snap_arm64.snap
    ls arm64-snap/usr/lib/jvm/
    
    # 检查amd64包
    unsquashfs -d amd64-snap your-iotdb-snap_amd64.snap
    ls amd64-snap/usr/lib/jvm/
    

    正常情况下会分别看到java-11-openjdk-arm64和java-11-openjdk-amd64目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:12:36