gpt4 book ai didi

windows - Go build 什么都不说就忽略文件

转载 作者:IT王子 更新时间:2023-10-29 01:15:29 27 4
gpt4 key购买 nike

在尝试构建我的 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.go中包含foo_windows.go中的方法时,windows构建成功,所以确实是排除文件,文件包含了所有需要的东西一个好的构建。

在 mac 上交叉编译和在 windows 机器上正常编译都会导致相同的文件排除问题,这让我相信是文件本身导致了问题,但我不确定它是什么可能。

有人知道为什么会这样吗?

最佳答案

我会回答我自己的问题,希望它能帮助别人。

foo_windows.go 由于未表达的构建错误而未包含在构建中。具体来说,foo_windows.go 包含 C 代码,因为 CGO_ENABLED=0 默认情况下,go 没有尝试编译它,它只是看到文件中有 C 代码并且排除文件。设置 CGO_ENABLED=1 将文件包含在构建中。

关于windows - Go build 什么都不说就忽略文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33634358/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com