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

如何将Go主程序与独立文件中的汇编函数链接生成可执行文件?

解决Go与汇编文件链接时找不到runtime.a的问题

首先修正代码中的问题,再给出正确的构建方式:

1. 修正代码

Go主程序(main.go)

func main() {
    _ = add(5, 3)
}

汇编文件(add.s)

Go的汇编语法要求TEXT指令大写,且必须遵循Go的amd64调用约定(参数依次存于DI、SI寄存器,返回值需存入AX寄存器),修正后的代码:

TEXT main.add(SB), NOSPLIT, $0-16
MOVQ DI, AX    // 将第一个参数(5)移入AX寄存器
ADDQ SI, AX    // 加上第二个参数(3)
RET            // 返回AX中的计算结果

2. 正确构建方式

推荐:直接用go build自动处理

将main.go和add.s放在同一目录下,执行以下命令即可生成可执行文件:

go build -o myapp .

Go工具链会自动完成Go文件编译、汇编文件编译,并自动链接Go运行时(包括runtime.a等所有依赖),无需手动指定路径。

手动分步编译(仅作参考,不推荐)

如果一定要手动完成编译和链接步骤:

  1. 编译Go文件为目标文件:
go tool compile -o main.o main.go
  1. 编译汇编文件为目标文件:
go tool asm -o add.o add.s
  1. 获取Go运行时库的路径,执行:
go list -f '{{.Target}}' runtime

命令会输出类似$GOROOT/pkg/linux_amd64/runtime.a的路径,接着执行链接命令:

go tool link -o myapp main.o add.o $(go list -f '{{.Target}}' runtime)

注意:手动链接可能还需要处理其他隐藏依赖,因此优先使用go build简化流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:22:19