在尝试构建我的 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 不应被忽略。请注意,当直接包含 infoo_windows.go中的方法时foo.go,windows 构建成功,因此它确实排除了该文件,并且该文件包含了良好构建所需的一切。在 mac 上交叉编译和在 windows 机器上正常编译都会导致相同的文件排除问题,这让我相信是文件本身导致了问题,但我不确定它可能是什么。有谁知道为什么会这样?
1 回答
一只甜甜圈
TA贡献1836条经验 获得超5个赞
我会回答我自己的问题,希望它可以帮助别人。
foo_windows.go
由于未表达的构建错误,未包含在构建中。具体来说,foo_windows.go
包含C代码,因为CGO_ENABLED=0
默认情况下,go并没有尝试编译它,它只是看到文件中有C代码并排除了该文件。设置CGO_ENABLED=1
包含在构建中的文件。
- 1 回答
- 0 关注
- 212 浏览
添加回答
举报
0/150
提交
取消