在GO标准库中,我的Go安装下有源文件:
C:\Go\src\pkg
源文件夹下的包对应于此处的.a文件:
C:\Go\pkg\windows_amd64
.a文件是什么?它们用于什么以及它们是如何产生的。我注意到,当我go get libraryhostedingithub
时,它们会自动生成。
答案 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
,并在7zip
或tar -xvf
等程序中将其作为常规压缩tar图像打开} Linux
中的命令,或者您可以使用实际上相同的go tool pack
。
在里面你会看到编译的目标文件“.o”,其中包含架构编译代码和调试符号,以及包含包元数据的包定义文件(__。PKGDEF)。