9

git2go在将 go 1.4.2 升级到 go 1.5 后,我无法将 OS X 上的库编译到 linux amd64。

我认为这是关于交叉编译任何使用 C 代码和 go 1.5 的 go 应用程序。

使用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,并且$GOPATH指向默认~/go位置,没什么特别的。

4

2 回答 2

11

交叉编译时默认不启用 cgo。如果启用 cgo,并且 CGO_ENABLED=1,您将需要为目标机器提供交叉编译的 c 编译器。这不是微不足道的。

如果您需要 cgo,我建议您进行本机编译。

于 2015-08-31T11:29:30.957 回答
1

如果您需要 cgo 交叉编译,我会向您指出xgo,我发现它非常有帮助。它在我的 100% 用例中都不起作用,但是对我的代码进行一些小的(与维护本机 VM 以进行交叉编译相比)更改就足够了。

于 2016-02-07T03:30:00.007 回答