2015-11-23 14 views
24

Supponiamo che io sia principalmente un utente Linux, ma sto sviluppando un'applicazione in Go che voglio essere multipiattaforma. Ho cercato in giro, ma io non riesco a trovare le informazioni di assolvere il seguente:I binari di Golang sono portatili?

  1. Se io go install un binario sul mio sistema Ubuntu amd64, funzionerà anche su chiunque altro a 64-bit di Ubuntu/Sistema Debian?
  2. Come è possibile utilizzare go install per creare un binario x86_64 che verrà eseguito anche in Debianlikes a 32 bit?
  3. Se devo usare Windows per creare un binario che verrà eseguito su Windows, come posso anche assicurarmi che anche se il mio sistema Windows è a 64-bit, l'eseguibile verrà creato per x86_64?

Le mie domande in effetti si riducono a "quanto è statico/portatile il linker/compiler di go?"

+1

io non sono sicuro di quello che stai chiedendo . I binari sono portatili tra sistemi con lo stesso sistema operativo e architettura. Go crea il file binario per il tuo host GOOS e GOARCH a meno che tu non specifichi diversamente. Non puoi prendere un binario a 64 bit ed eseguirlo su un sistema a 32 bit. – JimB

+0

Questa non è stata la mia esperienza con la creazione di binari che sono pensati per essere multipiattaforma. – cat

+2

Per rispondere alla tua domanda: "Niente affatto". Semplicemente perché questo è impossibile da fare. Nessun compilatore/linker/loader/toolchain può farlo. Compilazione incrociata di Google che è banale con Go. – Volker

risposta

32
  1. Sì, lo farà; questo è vero fondamentalmente per tutti i binari compilati per Linux a 64 bit, non solo quelli scritti in Go (eccetto per le librerie condivise, su cui Go non si basa)
  2. È possibile impostare le variabili di ambiente GOOS e GOARCH prima della costruzione: GOOS=windows GOARCH=386 go build (o go install o qualsiasi altra cosa), ecc
  3. per impostazione predefinita un binario sarà costruito per il sistema che si sta eseguendo, ma questo non è necessario - si veda 2
Problemi correlati