2015-08-31 19 views
6

Ho problemi a compilare la libreria git2go su OS X su linux amd64 dopo l'aggiornamento andare 1.4.2 per andare 1.5.go 1.5 cross compile usando cgo su OS X su linux e windows

Penso che si tratti di compilazione incrociata di qualsiasi app go che utilizza il codice C con go 1.5.

Utilizzando CGO_ENABLED=1, ottengo:

$ CGO_ENABLED=1 GOOS=linux GOARCH=amd64 ./script/with-static.sh go install ./... 
# runtime/cgo 
ld: unknown option: --build-id=none 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Utilizzando -compiler=gccgo, ottengo:

$ GOOS=linux GOARCH=amd64 ./script/with-static.sh go install -compiler gccgo ./... 
go build github.com/libgit2/git2go: : fork/exec : no such file or directory 

In caso contrario la fornitura di una di queste, ottengo:

$ GOOS=linux GOARCH=amd64 ./script/with-static.sh go install ./... 
can't load package: package github.com/libgit2/git2go: C source files not allowed when not using cgo or SWIG: wrapper.c 

I installato vai usando homebrew, e ho il $GOPATH che punta alla posizione predefinita ~/go, niente di speciale.

+1

L'installazione di arch linux su qemu o virtualbox dovrebbe essere banale da compilare per linux, e puoi seguire * my * [guide] (http://www.limitlessfx.com/cross-compile-golang-app-for- windows-from-linux.html) per eseguire la cross-compilazione da lì a Windows. – OneOfOne

+1

Probabilmente vuoi saltare all'ultima fase di compilazione se stai usando 1.5. – OneOfOne

+1

@OneOfOne il tuo commento ha aiutato molto, è abbastanza facile compilare compilazione per Windows da un contenitore Linux. Grazie. – Calin

risposta

9

cgo non è abilitato per impostazione predefinita durante la compilazione incrociata. Se abiliti cgo, con CGO_ENABLED = 1 dovrai avere un compilatore c compilato in modo incrociato per il computer di destinazione. Questo non è banale.

Suggerisco, se è necessario cgo, compilare in modo nativo.

0

Se hai bisogno della compilazione di cgo cross, ti indico a xgo, che ho trovato estremamente utile. Non funzionava nel 100% dei casi di utilizzo, ma con alcune modifiche minori (rispetto al mantenimento delle VM native per la compilazione incrociata) sul mio codice, era sufficiente.