繁体   English   中英

突然go工具:没有这样的工具“编译”

[英]All of a sudden go tool: no such tool "compile"

我已经在我的 Ubuntu 桌面上安装了 go,在我关闭计算机之前它运行良好。

现在,当我启动我的机器并继续我的项目工作时,我得到了这个

$ go build
go tool: no such tool "compile"
go tool: no such tool "compile"
go tool: no such tool "compile"
go tool: no such tool "compile"
go tool: no such tool "compile"

当我尝试构建一个项目时。

我在 poweroff 之前做的唯一可能有一些影响的事情是使用安装 godoc

sudo apt-get install golang-doc

我通过下载go1.10.1.linux-amd64.tar.gz文件直接安装了 go,没有使用apt-get

go 环境

GOARCH="amd64"
GOBIN=""
GOCACHE="/home/me/.cache/go-build"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/me/go"
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build255010769=/tmp/go-build -gno-record-gcc-switches"

$ go 版本

go version go1.10.1 linux/amd64

我仍然可以运行编译的 go 代码。

这里可能出了什么问题? 我该如何解决?

compile程序应该在你的go env GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"目录中。 如果没有,请下载 Go,删除/usr/local/go ,然后重新安装 Go。

这可能看起来很奇怪,但运行export GOROOT=为我解决了这个问题。

当我运行 go tour 时,我在 MacOS Monterey(ARM 芯片)上遇到了类似的问题,输出显示“go tool no such tool 'compile'”

我确实注意到,而不是usr/local/go/pkg/tool中的amd_64文件,我有这个:

 /usr/local/go/pkg/tool/darwin_amd64

我尝试更改 GOTOOLDIR 变量,但仍然遇到相同的问题:

export GOTOOLDIR=/usr/local/go/pkg/tool/darwin_amd64

下载.tar.gz与使用apt-get可能会导致go env值冲突/覆盖。 最好坚持一种安装方法。

我在 Mac 中遇到过类似的问题。 当我使用.dmg安装 Go 时(类似于您的.tar.gz案例),它为GOTOOLDIR设置了一个完全不同的值,而当我使用brew install golang时(类似于您的apt-get案例)。

分析:

如果您执行以下操作:

go env | grep GOTOOLDIR
cd <value of GOTOOLDIR>
ls

您应该看到以下内容(注意compile二进制文件):

addr2line   buildid     cover       fix     objdump     test2jsonapi        
cgo         dist        link        pack    trace
asm         compile     doc         nm      pprof       vet

如果你不这样做,那么你可能已经切换到错误/覆盖/更早的 Go 安装。

解决方案:

  1. 如果您使用的是 IDE,则可以通过转到SettingsPreferences在多个 Go SDK 之间轻松切换。 然后重启IDE中的终端
  2. 如果您不使用 IDE,一个简单的解决方案是卸载 Go 安装。 然后仅使用一种方法重新安装 Go。 并使用相同的方法安装任何其他 Go 相关的东西。

升级go后,我开始收到此错误并将 GOROOT 从/Users/bharkum3/.go更新到/Users/bharkum3/.go/go-1.18.2为我工作。

看起来 go install 现在正在为每个版本创建一个单独的文件夹(我猜我们的脚本正在这样做)并且需要上面的内容将编译器重定向到正确的版本。

我在我的 MAC M1 中遇到了同样的问题。

以前,我使用“brew”下载了它。 我尝试手动下载并重新安装。 这对我有用。

go 版本:1.18.2 下载: https://go.dev/dl/

我遇到了类似的问题,但在与 op 不同的系统上,确切地说是 windows+cygwin。

我的问题是工具文件夹中的文件未标记为可执行文件。

要解决这个问题:

  1. go 到工具目录(参见 Abhinav Sureka 解决方案)
  2. chmod a+x *

在 Apple Silicon / M1 上。

您可能在.bash_profile或 .zshrc 中手动将GOROOT设置为类似.zshrc GOROOT="/usr/local/opt/go/libexec"的内容。

现在是:

export GOROOT=/opt/homebrew/opt/go/libexec

为什么?

Brew 将 M1 arm 构建的目录从/usr/local/opt更改为/opt/homebrew/opt

就我而言,我使用 brew 安装了一些 go 工具(brew install golangci-lint)。 这导致安装另一个 go 二进制文件。 我通过运行解决了这个问题

brew uninstall go

Ubuntu 18 具体解决方案:

  • 删除了手动安装的 Go SDK 和 Go SRC
  • 删除手动设置 GOROOT 变量
  • golang-backports安装了 Golang 包:
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get install golang-1.15
  • 用以下内容更新了我的${HOME}/.bashrc
export PATH=$PATH:/usr/lib/go-1.15/bin
  • 重新启动操作系统

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM