2013-03-21 17 views
17

nella libreria standard GO, ci sono file di origine sotto la mia installazione Go:Cosa sono i file .a in Go?

C:\Go\src\pkg 

I pacchetti sotto la cartella di origine corrisponde a .a file qui:

C:\Go\pkg\windows_amd64 

Quali sono i .a File ? Per cosa vengono utilizzati e come vengono generati. Ho notato che vengono generati automaticamente quando faccio go get libraryhostedingithub.

risposta

19

Sono pacchetti compilati. Sono questi file a cui fai riferimento quando scrivi import foo/bar. Si riferisce a $GOROOT/pkg/$GOOS_$GOARCH/foo/bar.a e non a $GOROOT/src/foo/bar/*.go.

Questi file contengono il codice binario del pacchetto compilato, insieme ai simboli di debug e alle informazioni di origine.

+0

Ciò significa che è possibile distribuire le librerie in forma di pacchetto puramente compilato? Ricordo di aver letto da qualche parte che è possibile distribuire solo le librerie in Go tramite i file sorgente. – Dante

+4

In linea di principio, sì, potresti farlo. Ma ricorda che sono compilati per piattaforme specifiche. Quindi un pacchetto per una piattaforma non può essere importato con successo in un ciclo di build, indirizzato a un'altra piattaforma. Alla fine, la distribuzione dei sorgenti è molto meno complicata. – jimt

+1

@JohnNevermore In questo momento, la compilazione di w/o source non è supportata sebbene dovrebbe essere possibile; tutte le informazioni necessarie sono incluse nel file della libreria (.a) – fuz

4

Secondo il docs:

Se DIR è una directory elencata nel percorso di Go, un pacchetto con fonte in DIR/src/foo/bar possono essere importati come "foo/bar" e ha il suo modulo compilato installato su "DIR/pkg/GOOS_GOARCH/foo/bar.a" (oppure, per gccgo, "DIR/pkg/gccgo/foo/libbar.a").

Quindi sembra essere solo il pacchetto compilato/installato.

4

Go .a I file di archivio oggetto pacchetto vengono creati dal comando go tool pack: Command pack.

2

Come @peterSO ha dichiarato, "I file di archivio oggetto pacchetto .a vengono creati dal comando go tool pack: Command pack.".

Tuttavia, per essere ancora più chiaro, è possibile copiare i file e rinominare l'estensione a .tar.gz e aprirli come immagine tar compresso regolare in un programma come 7zip o il comando tar -xvf in Linux, oppure è possibile utilizzare il go tool pack che è effettivamente lo stesso.

All'interno verranno visualizzati i file oggetto compilati ".o" che contiene i simboli di codice e debug compilati dall'architettura e il file di definizione del pacchetto (__. PKGDEF) che contiene i metadati del pacchetto.