Golang编译失败且无任何警告或错误信息
Golang编译失败且无任何警告或错误信息
在编译 syzkaller(一个基于 syzkaller 提交 a371c43c33b6f901421f93b655442363c072d251 的定制版本,在该提交上编译是成功的)时,我遇到了一个问题。
当我使用 make fuzzer 时,收到一条消息说:
build constraints exclude all Go files in xxx
以下是完整的输出:
zec@creat2012-Inspiron-3910:~/SyzDirect/source/syzdirect/syzdirect_fuzzer$ make fuzzer
go list -f '{{.Stale}}' ./sys/syz-sysgen | grep -q false || go install ./sys/syz-sysgen
make .descriptions
make[1]: '.descriptions' is up to date.
GOOS=linux GOARCH=amd64 go build "-ldflags=-s -w -X github.com/google/syzkaller/prog.GitRevision=02c9a6504a757e6cec0f10202624d175aa474d94+ -X 'github.com/google/syzkaller/prog.gitRevisionDate=20240118-134457'" "-tags=syz_target syz_os_linux syz_arch_amd64 " -o ./bin/linux_amd64/syz-fuzzer github.com/google/syzkaller/syz-fuzzer
package github.com/google/syzkaller/syz-fuzzer
imports github.com/google/syzkaller/pkg/cover
imports github.com/google/syzkaller/pkg/cover/backend
imports github.com/google/syzkaller/pkg/host
imports github.com/google/syzkaller/pkg/csource
imports github.com/google/syzkaller/pkg/mgrconfig
imports github.com/google/syzkaller/sys
imports github.com/google/syzkaller/sys/akaros/gen: build constraints exclude all Go files in /home/zec/SyzDirect/source/syzdirect/syzdirect_fuzzer/sys/akaros/gen
package github.com/google/syzkaller/syz-fuzzer
imports github.com/google/syzkaller/pkg/cover
imports github.com/google/syzkaller/pkg/cover/backend
imports github.com/google/syzkaller/pkg/host
imports github.com/google/syzkaller/pkg/csource
imports github.com/google/syzkaller/pkg/mgrconfig
imports github.com/google/syzkaller/sys
imports github.com/google/syzkaller/sys/darwin/gen: build constraints exclude all Go files in /home/zec/SyzDirect/source/syzdirect/syzdirect_fuzzer/sys/darwin/gen
package github.com/google/syzkaller/syz-fuzzer
imports github.com/google/syzkaller/pkg/cover
imports github.com/google/syzkaller/pkg/cover/backend
imports github.com/google/syzkaller/pkg/host
imports github.com/google/syzkaller/pkg/csource
imports github.com/google/syzkaller/pkg/mgrconfig
imports github.com/google/syzkaller/sys
imports github.com/google/syzkaller/sys/freebsd/gen: build constraints exclude all Go files in /home/zec/SyzDirect/source/syzdirect/syzdirect_fuzzer/sys/freebsd/gen
package github.com/google/syzkaller/syz-fuzzer
imports github.com/google/syzkaller/pkg/cover
imports github.com/google/syzkaller/pkg/cover/backend
imports github.com/google/syzkaller/pkg/host
imports github.com/google/syzkaller/pkg/csource
imports github.com/google/syzkaller/pkg/mgrconfig
imports github.com/google/syzkaller/sys
imports github.com/google/syzkaller/sys/fuchsia/gen: build constraints exclude all Go files in /home/zec/SyzDirect/source/syzdirect/syzdirect_fuzzer/sys/fuchsia/gen
package github.com/google/syzkaller/syz-fuzzer
imports github.com/google/syzkaller/pkg/cover
imports github.com/google/syzkaller/pkg/cover/backend
imports github.com/google/syzkaller/pkg/host
imports github.com/google/syzkaller/pkg/csource
imports github.com/google/syzkaller/pkg/mgrconfig
imports github.com/google/syzkaller/sys
imports github.com/google/syzkaller/sys/netbsd/gen: build constraints exclude all Go files in /home/zec/SyzDirect/source/syzdirect/syzdirect_fuzzer/sys/netbsd/gen
package github.com/google/syzkaller/syz-fuzzer
imports github.com/google/syzkaller/pkg/cover
imports github.com/google/syzkaller/pkg/cover/backend
imports github.com/google/syzkaller/pkg/host
imports github.com/google/syzkaller/pkg/csource
imports github.com/google/syzkaller/pkg/mgrconfig
imports github.com/google/syzkaller/sys
imports github.com/google/syzkaller/sys/openbsd/gen: build constraints exclude all Go files in /home/zec/SyzDirect/source/syzdirect/syzdirect_fuzzer/sys/openbsd/gen
package github.com/google/syzkaller/syz-fuzzer
imports github.com/google/syzkaller/pkg/cover
imports github.com/google/syzkaller/pkg/cover/backend
imports github.com/google/syzkaller/pkg/host
imports github.com/google/syzkaller/pkg/csource
imports github.com/google/syzkaller/pkg/mgrconfig
imports github.com/google/syzkaller/sys
imports github.com/google/syzkaller/sys/test/gen: build constraints exclude all Go files in /home/zec/SyzDirect/source/syzdirect/syzdirect_fuzzer/sys/test/gen
package github.com/google/syzkaller/syz-fuzzer
imports github.com/google/syzkaller/pkg/cover
imports github.com/google/syzkaller/pkg/cover/backend
imports github.com/google/syzkaller/pkg/host
imports github.com/google/syzkaller/pkg/csource
imports github.com/google/syzkaller/pkg/mgrconfig
imports github.com/google/syzkaller/sys
imports github.com/google/syzkaller/sys/trusty/gen: build constraints exclude all Go files in /home/zec/SyzDirect/source/syzdirect/syzdirect_fuzzer/sys/trusty/gen
package github.com/google/syzkaller/syz-fuzzer
imports github.com/google/syzkaller/pkg/cover
imports github.com/google/syzkaller/pkg/cover/backend
imports github.com/google/syzkaller/pkg/host
imports github.com/google/syzkaller/pkg/csource
imports github.com/google/syzkaller/pkg/mgrconfig
imports github.com/google/syzkaller/sys
imports github.com/google/syzkaller/sys/windows/gen: build constraints exclude all Go files in /home/zec/SyzDirect/source/syzdirect/syzdirect_fuzzer/sys/windows/gen
make: *** [Makefile:158: fuzzer] Error 1
由于我的环境是 amd64 和 Linux,我认为这应该是正常的;然而,编译却失败了。
我尝试使用 -x 和 -v 来显示编译日志,但 -v 没有产生任何输出,而 -x 生成的 /tmp/go-xxxxx 文件是空的。
我想知道为什么编译会失败,因为它没有显示任何错误或警告。有没有什么方法可以让 Go 显示这些信息?
更多关于Golang编译失败且无任何警告或错误信息的实战教程也可以访问 https://www.itying.com/category-94-b0.html
- 虽然不常见,但编译器可能遇到了它未能清晰报告的错误。尝试运行
go build命令。与go compile相比,go build有时能提供更详细的输出信息。
更多关于Golang编译失败且无任何警告或错误信息的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这个问题是由于Go的构建约束(build constraints)导致的。错误信息显示多个平台的gen目录被排除在编译之外,但编译仍然失败。这通常发生在构建标签(build tags)配置不正确时。
从你的编译命令可以看到传递的构建标签是:
-tags="syz_target syz_os_linux syz_arch_amd64 "
注意末尾有一个多余的空格,这可能导致标签解析问题。另外,需要检查这些标签是否与代码中的构建约束匹配。
以下是诊断和解决步骤:
- 首先检查构建标签是否正确:
# 清理并重新编译,确保标签格式正确
GOOS=linux GOARCH=amd64 go build \
"-ldflags=-s -w -X github.com/google/syzkaller/prog.GitRevision=02c9a6504a757e6cec0f10202624d175aa474d94+ -X 'github.com/google/syzkaller/prog.gitRevisionDate=20240118-134457'" \
"-tags=syz_target,syz_os_linux,syz_arch_amd64" \
-o ./bin/linux_amd64/syz-fuzzer \
github.com/google/syzkaller/syz-fuzzer
- 查看具体哪些文件被排除:
# 检查特定目录的Go文件
find /home/zec/SyzDirect/source/syzdirect/syzdirect_fuzzer/sys/linux/gen -name "*.go" -type f
# 查看文件的构建约束
head -20 /home/zec/SyzDirect/source/syzdirect/syzdirect_fuzzer/sys/linux/gen/*.go 2>/dev/null | grep -A5 "//go:build"
- 使用更详细的构建命令:
# 使用go list查看包信息
GOOS=linux GOARCH=amd64 go list -tags="syz_target,syz_os_linux,syz_arch_amd64" ./sys/...
# 尝试单独编译sys包
GOOS=linux GOARCH=amd64 go build -tags="syz_target,syz_os_linux,syz_arch_amd64" ./sys
- 检查构建约束是否匹配:
查看
sys/linux/gen目录下的Go文件,通常会有类似这样的构建约束:
//go:build (syz_target && syz_os_linux && syz_arch_amd64) || (syz_target && syz_os_linux && syz_arch_arm64)
- 如果问题仍然存在,尝试修改Makefile: 找到Makefile第158行附近的构建命令,确保标签格式正确:
# 修改前
"-tags=syz_target syz_os_linux syz_arch_amd64 "
# 修改后(去掉末尾空格,使用逗号分隔)
"-tags=syz_target,syz_os_linux,syz_arch_amd64"
- 使用环境变量启用详细输出:
# 设置Go调试环境变量
export GOOS=linux
export GOARCH=amd64
export GOFLAGS="-v -x"
make fuzzer 2>&1 | tee build.log
这个问题通常是由于构建标签不匹配或格式问题导致的。检查构建标签的拼写、分隔符和格式,确保它们与源代码中的//go:build约束完全匹配。

