Golang编译时遇到"no such tool 'cgo'"错误如何解决

Golang编译时遇到"no such tool ‘cgo’"错误如何解决 当我在执行 go build 时收到以下消息:

go tool: no such tool “cgo”

当我使用 go env 检查 GOTOOLDIR 时,显示为 /usr/local/lib/gccgo/tool。
我检查了该目录下的 cgo,发现没有找到 cgo 文件。

8 回复

很抱歉我误解了你的问题。 我会重新写一遍。

再次表示歉意。

更多关于Golang编译时遇到"no such tool 'cgo'"错误如何解决的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


哦,抱歉。 原来是我设置 GOPATH 环境变量时出错了 修改之后,我就能成功构建我的 Go 文件了。

感谢您的帮助,这些帮助非常有用 👍👍👍

我已经安装了gccgo,但无法执行go build。我检查了cgo,发现在以下目录中找到了cgo:

/usr/local/pkg/tool/linux_arm

而我的GOTOOLDIR是/usr/local/lib/gccgo,该目录中没有cgo。

Cgo是Go发行版内置的工具,如果Go安装正确,Cgo应该也能正常工作。

你可以尝试执行 go tool 然后检查列表中是否存在 cgo

如果没有,最好重新安装Go。

func main() {
    fmt.Println("hello world")
}

当我运行 go tool 时出现以下错误:

go tool: no tool directory: open: /usr/local/go/lib/gccgo/tool: no such file or directory

我检查了 cgo,cgo 位于目录 /usr/local/go/pkg/tool/linux_arm 中,而不是在 /usr/local/go/lib/gccgo/tool 目录中。

gccgo 不包含在 go 发行版中。 您需要单独安装或构建 gccgo

https://golang.org/doc/install/gccgo#Source_code

How to Install

How to Install

关于如何在 Linux 上安装和卸载软件包的说明。

我认为无论是否使用cgo,你都可以运行gccgo

package main

import "fmt"

func main() {
        fmt.Println("Hello World")
}

我尝试用go和gccgo编译上述代码,得到以下结果:

~/go/src/hello $ go build -o hello_go hello.go
~/go/src/hello $ gccgo -o hello_gccgo hello.go

~/go/src/hello $ ls -lh
-rwxr-xr-x 1 pi pi  17K Dec 10 14:12 hello_gccgo
-rwxr-xr-x 1 pi pi 1.7M Dec 10 14:12 hello_go
-rw-r--r-- 1 pi pi   72 Sep  9 04:20 hello.go

如果没有指定目标文件或源文件,你应该会看到以下信息:

~/go/src/hello $ gccgo
gccgo: fatal error: no input files
compilation terminated.

你可以直接尝试使用gccgo -o 结果文件 源文件.go命令吗?

这个错误通常是由于 Go 工具链配置问题导致的,特别是当 GOTOOLDIR 指向了不正确的工具目录时。以下是几种解决方案:

解决方案1:重新安装 Go 工具链

# 卸载当前 Go 安装
sudo rm -rf /usr/local/go

# 重新下载并安装最新版本
wget https://golang.org/dl/go1.21.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz

解决方案2:检查并修复环境变量

# 检查当前 Go 环境
go env

# 如果 GOTOOLDIR 指向错误路径,重新设置
export GOTOOLDIR=$(go env GOROOT)/pkg/tool/$(go env GOOS)_$(go env GOARCH)
echo $GOTOOLDIR

解决方案3:验证工具链完整性

# 检查工具链中是否包含 cgo
ls $(go env GOROOT)/pkg/tool/$(go env GOOS)_$(go env GOARCH)/cgo*

# 如果缺少 cgo,重新安装工具链
go install -a std

解决方案4:使用包管理器重新安装

对于 Ubuntu/Debian 系统:

sudo apt remove golang-go
sudo apt update
sudo apt install golang-go

对于 CentOS/RHEL 系统:

sudo yum remove golang
sudo yum install golang

验证修复

修复后运行以下命令验证:

go tool cgo -h
go build

如果问题仍然存在,检查是否安装了 gccgo 而不是标准的 Go 编译器,建议使用官方 Go 发行版而非第三方变种。

回到顶部