![](/img/trans.png)
[英]Why does the Visual Studio Build Tools installer return immediately without installing anything?
[英]Go build ignores files without saying anything
在嘗試構建我的go程序的Windows版本時,我遇到了一些非常奇怪的行為。
我的目錄包含:
foo.go
foo_windows.go
foo_windows_test.go
foo_unix.go
foo_linux.go
foo_linux_test.go
foo_darwin.go
Windows構建失敗,因為構建忽略了foo_windows.go,出於某種原因。 請注意,任何文件中都沒有// +build
注釋。 這是構建文件列表的輸出:
$ GOOS=linux GOARCH=amd64 go list -f '{{.IgnoredGoFiles}}' github.com/foo/
[foo_darwin.go foo_windows.go foo_windows_test.go]
$ GOOS=darwin GOARCH=amd64 go list -f '{{.IgnoredGoFiles}}' github.com/foo/
[foo_linux.go foo_linux_test.go foo_windows.go foo_windows_test.go]
$ GOOS=windows GOARCH=amd64 go list -f '{{.IgnoredGoFiles}}' github.com/foo/
[foo_darwin.go foo_linux.go foo_linux_test.go foo_unix.go foo_windows.go]
顯然最后一項是非常錯誤的。 foo_windows.go不應該被忽略。 請注意,當直接在foo_windows.go
中foo.go
foo_windows.go
中的方法時,windows構建成功,因此它實際上是排除文件,並且該文件包含良好構建所需的所有內容。
在Mac上進行交叉編譯並在Windows機器上正常編譯都會導致文件排除的相同問題,這使我相信文件本身會導致問題,但我不確定它可能是什么。
有誰知道為什么會這樣?
我會回答我自己的問題,並希望它可以幫助別人。
由於未出現的構建錯誤, foo_windows.go
未包含在構建中。 具體來說, foo_windows.go
包含C代碼,並且因為默認情況下CGO_ENABLED=0
,所以go沒有嘗試編譯它,它只是看到文件中有C代碼CGO_ENABLED=0
除了文件。 設置CGO_ENABLED=1
包含構建中的文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.