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

标签 windows go build

在尝试构建我的 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/

相关文章:

c++ - 获取 C++ 函数的大小

go - 引用库中的另一个.go文件

build - 在构建失败条件下需要跳过 TeamCity 步骤

windows - PowerShell:查找并删除其中或子文件夹中没有文件的文件夹

c++ - 如何使用 Windows 套接字查找 : number of bytes in output buffer pending send, 但尚未传输到电线上?

linux - Windows 与 Linux 上的 MarkLogic 性能比较

go - 编译二进制比运行慢 "go run"

go - 方法在结构副本上的应用反射(reflect)在原始结构中

maven - 如何使用 Maven 构建 Hadoop 作业

java - 为什么 pom.xml/maven 中有排除依赖项的依赖项的选项?