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

2 回复
  • 虽然不常见,但编译器可能遇到了它未能清晰报告的错误。尝试运行 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 "

注意末尾有一个多余的空格,这可能导致标签解析问题。另外,需要检查这些标签是否与代码中的构建约束匹配。

以下是诊断和解决步骤:

  1. 首先检查构建标签是否正确
# 清理并重新编译,确保标签格式正确
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
  1. 查看具体哪些文件被排除
# 检查特定目录的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"
  1. 使用更详细的构建命令
# 使用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
  1. 检查构建约束是否匹配: 查看sys/linux/gen目录下的Go文件,通常会有类似这样的构建约束:
//go:build (syz_target && syz_os_linux && syz_arch_amd64) || (syz_target && syz_os_linux && syz_arch_arm64)
  1. 如果问题仍然存在,尝试修改Makefile: 找到Makefile第158行附近的构建命令,确保标签格式正确:
# 修改前
"-tags=syz_target syz_os_linux syz_arch_amd64 "

# 修改后(去掉末尾空格,使用逗号分隔)
"-tags=syz_target,syz_os_linux,syz_arch_amd64"
  1. 使用环境变量启用详细输出
# 设置Go调试环境变量
export GOOS=linux
export GOARCH=amd64
export GOFLAGS="-v -x"
make fuzzer 2>&1 | tee build.log

这个问题通常是由于构建标签不匹配或格式问题导致的。检查构建标签的拼写、分隔符和格式,确保它们与源代码中的//go:build约束完全匹配。

回到顶部