2009-11-18 4 views

risposta

13

questo è possibile utilizzando bandiera -linkshared

Quello che dovete fare è eseguire prima questo comando: (! Soprattutto codice rende tutti i pacchetti comuni condivisibili)

go install -buildmode=shared -linkshared std 

poi

go install -buildmode=shared -linkshared userownpackage 

infine durante la compilazione del codice è necessario eseguire:

go build -linkshared yourprogram 

Ciò che sopra è ora piuttosto che collegare staticamente tutto solo in modo dinamico li collega e si finirà con file compilati molto più piccoli. Solo per darti un'idea, il mio file "ciao.go" con collegamento statico è di 2,3 MB mentre lo stesso codice che utilizza il collegamento dinamico è di soli 12 KB!

+1

La risposta corretta. – 0x90

+0

questo è quello che stavo cercando. Ma dà '-buildmode = condiviso non supportato su darwin/amd64' sul mio mac. – lvle

3

Apparentemente, ora è possibile, ma solo in un insieme di circostanze molto precise. Più precisamente, se stai scrivendo per la piattaforma Android.

Il progetto "goandroid" su GitHub fornisce un set di patch che consente a Go di creare una libreria condivisa per uso specifico con l'NDK di Android. Vedere https://github.com/eliasnaur/goandroid

+1

As-of-now (luglio 2013), è un'estensione di Go Tools e non è incorporato negli strumenti Go forniti da Google. – Nate

+0

@Nate puoi collegarti all'estensione? L'estensione (autonoma) è utilizzabile solo su Android o è disponibile anche per uso desktop? –

+0

@mihaistancu Immagino che non sarebbe troppo difficile cross-compilare andare per Android, vedere [qui] (https://jasonplayne.com/programming-2/how-to-cross-compile-golang-for-android). Potrebbe ottenere presto supporto ufficiale, considerando che golang 1.5 supporta iOS. – Nate

5

Go Execution Modes descrive pacchetti Costruire Go come libreria condivisa:

"In questo modo un pacchetto Go, o una serie di pacchetti, può essere costruito come una libreria condivisa Un programma Go che importa una o. più di questi pacchetti Go possono essere collegati a questa libreria condivisa.La libreria condivisa può essere cambiata tra il momento in cui il programma Go è collegato e il tempo in cui viene eseguito, la libreria condivisa che è disponibile all'avvio del programma è quella che sarà usato ...

Nella versione Go 1.5 questo è implementato solo per il target linux-amd64. usando gccgo è implementato per qualsiasi target supportato. "

+0

Sono tornato a questa domanda per scrivere anche un aggiornamento. +1 –