Go中的.a文件是什么?

Dan*_*nte 25 go

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

C:\Go\src\pkg
Run Code Online (Sandbox Code Playgroud)

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

C:\Go\pkg\windows_amd64
Run Code Online (Sandbox Code Playgroud)

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

jim*_*imt 26

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

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

  • 原则上,是的,你可以这样做.但请记住,它们是针对特定平台编译的.因此,无法将一个平台的程序包成功导入构建周期,并针对另一个平台.最后,源代码分发不那么麻烦. (4认同)

pet*_*rSO 6

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


Jer*_*emy 6

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

然而,更清楚的是,您可以复制这些文件并将扩展名重命名为,并.tar.gz在类似程序7zip或中的tar -xvf命令中将它们作为常规压缩的 tar 映像打开Linux,或者您可以使用go tool pack实际上相同的命令。

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


Igo*_*gor 5

根据文件:

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

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