E 'possibile creare una Libreria condivisa (.so) usando Go?Libreria condivisa in Go?
AGGIORNATO: creato per questo "issue".
E 'possibile creare una Libreria condivisa (.so) usando Go?Libreria condivisa in Go?
AGGIORNATO: creato per questo "issue".
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!
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
As-of-now (luglio 2013), è un'estensione di Go Tools e non è incorporato negli strumenti Go forniti da Google. – Nate
@Nate puoi collegarti all'estensione? L'estensione (autonoma) è utilizzabile solo su Android o è disponibile anche per uso desktop? –
@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
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. "
Sono tornato a questa domanda per scrivere anche un aggiornamento. +1 –
Possibile ora! Ho costruito un file .so usando Go e poi importato in python abbastanza facilmente! Ecco un articolo che mi è piaciuto: http://www.darkcoding.net/software/building-shared-libraries-in-go-part-1/
La risposta corretta. – 0x90
questo è quello che stavo cercando. Ma dà '-buildmode = condiviso non supportato su darwin/amd64' sul mio mac. – lvle