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 для кросс-компиляции) изменениями в моем коде этого было достаточно.