Go中的.a文件是什么?

时间:2013-03-21 15:11:52

标签: go

在GO标准库中,我的Go安装下有源文件:

C:\Go\src\pkg

源文件夹下的包对应于此处的.a文件:

C:\Go\pkg\windows_amd64

.a文件是什么?它们用于什么以及它们是如何产生的。我注意到,当我go get libraryhostedingithub时,它们会自动生成。

4 个答案:

答案 0 :(得分:24)

它们是编译包。编写import foo/bar时,您正在引用这些文件。它指的是$GOROOT/pkg/$GOOS_$GOARCH/foo/bar.a而不是$GOROOT/src/foo/bar/*.go

这些文件包含已编译的包二进制代码,以及调试符号和源信息。

答案 1 :(得分:5)

根据docs

  

如果DIR是Go路径中列出的目录,则可以将包含DIR / src / foo / bar源的包导入为“foo / bar”,并将其编译形式安装到“DIR / pkg / GOOS_GOARCH / foo” /bar.a“(或者,对于gccgo,”DIR / pkg / gccgo / foo / libbar.a“)。

所以它似乎只是编译/安装的包。

答案 2 :(得分:4)

Go .a包对象存档文件由go tool pack命令创建:Command pack

答案 3 :(得分:4)

正如@peterSO所说,“.a包对象存档文件是由go tool pack命令创建的:Command pack。”。

但是,为了更加清楚,您可以复制这些文件并将扩展名重命名为.tar.gz,并在7ziptar -xvf等程序中将其作为常规压缩tar图像打开} Linux中的命令,或者您可以使用实际上相同的go tool pack

在里面你会看到编译的目标文件“.o”,其中包含架构编译代码和调试符号,以及包含包元数据的包定义文件(__。PKGDEF)。