![](/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.