go 1.5 кросс-компиляция с использованием cgo в OS X для linux и windows

у меня возникли проблемы при компиляции git2go библиотека на OS X для linux amd64 после обновления go 1.4.2 To go 1.5.

Я думаю, что речь идет о кросс-компиляции любого приложения go, которое использует код C с go 1.5.

используя CGO_ENABLED=1, Я:

$ 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)

используя -compiler=gccgo, Я:

$ 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

если не поставлять любой из тех, я получаю:

$ 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

Я установил go с помощью homebrew, и у меня есть $GOPATH указывая на по умолчанию ~/go расположение, ничего особенного.

2 ответов


cgo не включен по умолчанию при перекрестной компиляции. Если вы включите cgo, с CGO_ENABLED=1 Вам понадобится перекрестный компилятор компиляции c для целевой машины. Это нетривиально.

Я рекомендую, если вам нужен груз, чтобы скомпилировать.


Если вам нужна компиляция cgo cross, я бы указал вам на xgo, который я нашел чрезвычайно полезным. Он не работал в 100% моих случаев использования, но с некоторыми незначительными (по сравнению с поддержанием собственных VMs для кросс-компиляции) изменениями в моем коде этого было достаточно.