10.3 导出对象文件

将编译结果导出为对象文件是编译的最后一步,该文件是编译器的输出,链接器的输入。该逻辑在编译器主函数的尾部:

// file: cmd/compile/internal/gc/main.go

func Main() {
    // 忽略之前代码

    // 导出编译结果到磁盘
    base.Timer.Start("be", "dumpobj")
    dumpdata()
    base.Ctxt.NumberSyms()
    dumpobj()
    if base.Flag.AsmHdr != "" {
        dumpasmhdr()
    }
}

可以通过编译参数 -o 指定导出的文件名,默认情况下与编译的文件名或包名一致。例如将下列内容保存为 main.go:

package main

func sum(i, j int) int {
    return i + j
}

通过命令 go tool compile -G=3 main.go 得到编译输出文件 main.o.

对于编译得到的结果,可以通过命令 go tool objdump 查看,使用 go tool objdump main.o 可以得到如下结果:

最后更新于

这有帮助吗?