我在構(gòu)建一個(gè)相當(dāng)簡(jiǎn)單的本地CGO項(xiàng)目時(shí)遇到問(wèn)題??紤]這個(gè)只有3個(gè)文件(glut.go,support.c和support.h文件)的非常小的CGO軟件包-如果我剛得到它,這些文件將下載到C:\Go\src\pkg\github.com\zombiezen\Go-GLUT\glut然后發(fā)生了一些秘密魔術(shù),然后go get構(gòu)建以下輸出文件:C:\Go\pkg\windows_amd64\github.com\zombiezen\Go-GLUT\glut.a但是,如果我將三個(gè)源文件復(fù)制到\ mytmp,將cd復(fù)制到\ mytmp并進(jìn)行build -o glut.a glut.go,則會(huì)收到類似以下內(nèi)容的40-60條錯(cuò)誤消息: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命令行參數(shù)運(yùn)行g(shù)o get,我可以看到在構(gòu)建過(guò)程中獲得了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但是,對(duì)于go build -x,情況并非如此,將跳過(guò)support.c。為什么?我如何稱呼go build像go get一樣工作?
難道不是“去獲取”只是獲取文件,然后cgo +“去構(gòu)建”它們嗎?顯然不是
桃花長(zhǎng)相依
2021-04-30 14:58:57