9

git2gogo 1.4.2 を go 1.5 にアップグレードした後、OS X 上のライブラリを Linux amd64 にコンパイルするのに問題があります。

これは、C コードを使用する go アプリを 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

私はhomebrewを使ってgoをインストールしましたが、デフォルトの場所$GOPATHを指しています。~/go

4

2 に答える 2

11

クロス コンパイル時、デフォルトでは cgo は有効になっていません。CGO_ENABLED=1 で cgo を有効にする場合は、ターゲット マシン用のクロス コンパイル C コンパイラが必要になります。これは自明ではありません。

cgo が必要な場合は、ネイティブにコンパイルすることをお勧めします。

于 2015-08-31T11:29:30.957 に答える
1

cgo クロス コンパイルが必要な場合は、xgoを参照してください。これは非常に役に立ちました。私のユースケースの 100% では機能しませんでしたが、(クロスコンパイル用にネイティブ VM を維持する場合と比較して) コードに若干の変更を加えるだけで十分でした。

于 2016-02-07T03:30:00.007 に答える