30

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

C:\Go\src\pkg

源文件夹下的包对应这里的 .a 文件:

C:\Go\pkg\windows_amd64

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

4

4 回答 4

29

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

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

于 2013-03-21T15:22:20.970 回答
6

Go .a package object archive files are created by the go tool pack command: Command pack.

于 2013-03-21T15:31:28.290 回答
5

根据文档

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

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

于 2013-03-21T15:16:16.320 回答
4

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

但是,更清楚地说,您可以复制这些文件并将扩展名重命名为.tar.gz并在程序中将它们作为常规压缩 tar 映像打开,或者您可以使用相同7ziptar -xvf命令。Linuxgo tool pack

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

于 2016-11-18T05:47:44.233 回答