我在构建一个相当简单的本地 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
但是,如果我将三个源文件复制到 \mytmp,cd 到 \mytmp 并go 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 build像go get一样工作?