簡體   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