2013-03-21 4 views
17

In der GO-Standardbibliothek gibt es Quelldateien unter meiner Go-Installation:Was sind .a-Dateien in Go?

C:\Go\src\pkg 

Die Pakete unter dem Quellordner entspricht hier Dateien .A:

C:\Go\pkg\windows_amd64 

Was die .a sind Dateien? Wofür werden sie verwendet und wie werden sie generiert? Ich habe bemerkt, dass sie automatisch generiert werden, wenn ich go get libraryhostedingithub mache.

Antwort

19

Sie sind kompilierte Pakete. Es sind diese Dateien, die Sie referenzieren, wenn Sie import foo/bar schreiben. Es bezieht sich auf $GOROOT/pkg/$GOOS_$GOARCH/foo/bar.a und nicht $GOROOT/src/foo/bar/*.go.

Diese Dateien enthalten den kompilierten Binärcode des Pakets sowie Debugsymbole und Quellinformationen.

+0

Bedeutet das, dass es möglich ist, Bibliotheken in rein kompilierter Form zu verteilen? Ich erinnere mich, irgendwo gelesen zu haben, dass es nur möglich ist, Bibliotheken in Go über Quelldateien zu verteilen. – Dante

+4

Im Prinzip könnten Sie das ja tun. Aber denken Sie daran, dass sie für bestimmte Plattformen kompiliert sind. Ein Paket für eine Plattform kann daher nicht erfolgreich in einen Build-Zyklus importiert werden, der auf eine andere Plattform ausgerichtet ist. Am Ende ist die Verteilung der Quellen viel weniger mühsam. – jimt

+1

@JohnNevermore Momentan wird Gebäude ohne Quelle nicht unterstützt, obwohl es möglich sein sollte; Alle benötigten Informationen sind in der Bibliotheksdatei enthalten (.a) – fuz

4

Nach dem docs:

Wenn DIR ein Verzeichnis im Go-Pfad, ein Paket mit Quelle in DIR/src/foo/bar importiert werden kann als "foo/bar" aufgeführt ist und sein Das kompilierte Formular wurde in "DIR/pkg/GOOS_GOARCH/foo/bar.a" installiert (oder für gccgo, "DIR/pkg/gccgo/foo/libbar.a").

So scheint es nur das kompilierte/installierte Paket zu sein.

4

Go .a Paketobjekt Archivdateien werden vom go tool pack Befehl erstellt: Command pack.

2

Wie @peterSO sagte, "Go .a Paket Objekt Archivdateien werden durch den go tool pack Befehl erstellt: Command pack.".

jedoch noch klar sein, können Sie diese Dateien kopieren und die Erweiterung auf .tar.gz und öffnen Sie sie als regelmäßiges komprimiertes tar-Bild in einem Programm wie 7zip oder tar -xvf Befehl in Linux, oder Sie können die go tool pack verwenden umbenennen Das ist effektiv das Gleiche.

Im Inneren sehen Sie die kompilierten Objektdateien ".o", die die Architektur kompilierten Code und Debug-Symbole enthält, und die Paketdefinitionsdatei (__. PKGDEF), die die Metadaten des Pakets enthält.