2013-08-13 5 views
5

Ogni volta che provo a compilare il mio programma dopo (questa mattina) l'aggiornamento vanno da 1.1.1 a 1.1.2 (su Windows 7 64 bit), ottengo il messaggio di errore del tipo:Come compilare il programma go in 1.1.2 con le dipendenze compilate in 1.1.1?

C:\Users\VonC\prog\go\src\github.com\spf13\hugo>go build -o hugo.exe main.go 
# github.com/spf13/hugo/hugolib 
hugolib\page.go:23: import C:\Users\VonC\prog\go\pkg\windows_amd64/github.com/emicklei/hopwatch.a: 
    object is [windows amd64 go1.1.1 X:none] 
    expected [windows amd64 go1.1.2 X:none] 

ho provato un go clean -r , ma il messaggio di errore persiste?

Qual è il comando corretto clean da utilizzare?

+0

Sono sorpreso dal fatto che il sistema di build di Go suppone di capire qualsiasi roba obsoleta in $ GOPATH/pkg e (in modo transitorio) ricostruirlo su richiesta. – zzzz

+0

@jnml Sono d'accordo. Ha mancato le dipendenze, ma forse perché non ho usato 'go build -a' inizialmente? – VonC

+1

@jnml capito. Ho trovato l'incongruenza nella mia configurazione di go che ha attivato quel messaggio di errore. Ho modificato la mia risposta qui sotto. – VonC

risposta

4

soluzione reale:

ho riprodotto la questione con:

  • chiamando il 1.1.2 go.exe direttamente (non ho avuto %GOROOT%\bin nel mio percorso)
  • con GOROOT che punta al precedente 1.1.1 cartella di installazione (ho mantenuto andare 1.1.1 e 1.1.2 installato in cartelle separate).

Se si sta attaccando con la configurazione di default Go (vale a dire: directory di installazione di unaC:\go e %GOROOT%\bin nel vostro PATH), non sarà possibile visualizzare questo errore.

Ma se questo errore:

  • assicurarsi %GOROOT% è coerente con la go.exe che si sta chiamando
  • go install -a come spiegato di seguito. Il go clean indicato di seguito non sarà necessario.
    Come jnmlcomments:

the Go build system is supposed to figure out any obsolete stuff in $GOPATH/pkg and (transitively) rebuild it on demand.


soluzione originale:

Nella sezione "file oggetto Rimuovere" della pagina "Command go", mi mancava l'opzione go clean -i:

-i 

The -i flag causes clean to remove the corresponding installed archive or binary (what 'go install' would create).

E quelli file .a (come hopwatch.a) sono esattamente ciò che genera l'installazione per le librerie (in Windows).

Così il comando clean completo, per assicurarsi che andare ricostruire tutto, sarebbe:

cd C:\Users\VonC\prog\go\src\github.com\spf13\hugo 
go clean -r -i 
go install -a 

che ricostruirà e installare tutto, compresi tutti i pacchetti dipendenti.

-a è in realtà un'opzione di compilazione, che impone la ricostruzione di pacchetti già aggiornati.


Come al solito, go clean -r -n sarebbe mostrarvi quello che sarebbe stato pulito (-n: opzione di anteprima).
Non fa male sapere cosa verrà eliminato ... prima di eliminare effettivamente qualcosa.