1

かなり単純なローカル CGO プロジェクトの構築に問題があります。たった 3 つのファイル (glut.go、support.c、および support.h ファイル) からなるこの非常に小さな CGO パッケージについて考えてみましょう。

C:\Go\src\pkg\github.com\zombiezen\Go-GLUT\glut

次に、いくつかの秘密の魔法が発生し、go getは次の出力ファイルをビルドします。

C:\Go\pkg\windows_amd64\github.com\zombiezen\Go-GLUT\glut.a

ただし、3 つのソース ファイルを \mytmp にコピーし、\mytmp に cd してbuild -o glut.a glut.goを実行すると、次のような 40-60 エラー メッセージが表示されます。

C:\Users\roxor\AppData\Local\Temp\go-build191975110\command-line-arguments\_obj\glut.cgo2.o: In function `_cgo_b46885fb7c57_Cfunc_goCreateMenu':
./glut.go:195: undefined reference to `goCreateMenu'

-xコマンドライン引数を指定してgo getを実行すると、ビルド プロセス中にsupport.cが取得され、gcc に渡されることがわかります。

gcc -I . -g -O2 -m64 -mthreads -I $WORK\github.com\zombiezen\Go-GLUT\glut\_obj\ -o $WORK\github.com\zombiezen\Go-GLUT\glut\_obj\support.o -c .\support.c

ただし、go build -xでは、これは当てはまりません。support.c はスキップされます。なんで?go get とまったく同じようにgo buildを呼び出すにはどうすればよいですか?

4

1 に答える 1

0

go build代わりにやるだけgo build somefile.goです。今ではとても明白です…</p>

于 2012-05-12T10:45:21.193 に答える