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

解决Flathub CI中aarch64架构Go包构建失败:如何让Go不使用gold链接器

解决Go构建时指定替代链接器的问题

遇到这种Go调用gcc时因指定gold链接器但环境未安装导致的构建失败,其实可以通过修改Go的链接参数来使用环境中已有的链接器,下面是几种实用的解决方法:

临时构建命令中覆盖链接器参数

如果你只是临时调整构建行为,可以直接在go build或go install命令中通过-ldflags传递链接器参数,指定使用系统默认的ld或者bfd链接器:

使用系统默认ld链接器

go build -ldflags="-extldflags=-fuse-ld=ld" github.com/rclone/rclone

使用bfd链接器(如果环境中存在)

go build -ldflags="-linkmode=external -extldflags=-fuse-ld=bfd" github.com/rclone/rclone

这里的-extldflags是告诉Go将后续参数传递给外部C链接器(也就是gcc),通过替换-fuse-ld=后的链接器名称,就能切换到环境中可用的工具。

设置环境变量持久生效

如果不想每次构建都手动加参数,可以设置GO_LDFLAGS环境变量,让Go自动读取这些链接配置:

# 临时生效(当前终端会话)
export GO_LDFLAGS="-extldflags=-fuse-ld=ld"

# 然后执行构建
go build github.com/rclone/rclone

如果需要在CI环境中持久生效,可以把这个环境变量配置写入CI的初始化脚本里。

针对Flathub CI的配置优化

因为你是在Flathub的CI环境中构建,更推荐直接在Flatpak的manifest文件中配置构建环境变量,确保每次CI构建都能自动使用正确的链接器:

modules:
  - name: rclone
    buildsystem: go
    build-options:
      env:
        - GO_LDFLAGS="-extldflags=-fuse-ld=ld"
    sources:
      - type: git
        url: https://github.com/rclone/rclone.git
        tag: v1.65.0

前置检查:确认环境中可用的链接器

在调整之前,你可以先确认环境里有哪些可用的链接器,避免踩坑:

# 检查默认ld是否存在
which ld

# 检查bfd链接器是否存在
which ld.bfd

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 06:34:27