go build failed:runtime / mstkbar.go:151:10:debug.gcstackbarrieroff undefined

问题描述 投票:13回答:2

使用golang(1.8.3)的先前版本编译好的代码然而在升级到新的golang(1.9)之后无法编译

~/src/gopath/src/github.com/scottstensland/infosynth $ go build infosynth.go
# runtime
/usr/local/go/src/runtime/mstkbar.go:151:10: debug.gcstackbarrieroff undefined (type struct { allocfreetrace int32; cgocheck int32; efence int32; gccheckmark int32; gcpacertrace int32; gcshrinkstackoff int32; gcrescanstacks int32; gcstoptheworld int32; gctrace int32; invalidptr int32; sbrk int32; scavenge int32; scheddetail int32; schedtrace int32 } has no field or method gcstackbarrieroff)
/usr/local/go/src/runtime/mstkbar.go:162:24: division by zero
/usr/local/go/src/runtime/mstkbar.go:162:43: invalid expression unsafe.Sizeof(composite literal)
/usr/local/go/src/runtime/mstkbar.go:162:44: undefined: stkbar
/usr/local/go/src/runtime/mstkbar.go:212:4: gp.stkbar undefined (type *g has no field or method stkbar)
/usr/local/go/src/runtime/mstkbar.go:213:15: gp.stkbar undefined (type *g has no field or method stkbar)
/usr/local/go/src/runtime/mstkbar.go:216:23: undefined: stackBarrierPC
/usr/local/go/src/runtime/mstkbar.go:226:28: gp.stkbarPos undefined (type *g has no field or method stkbarPos)
/usr/local/go/src/runtime/mstkbar.go:227:19: gp.stkbarPos undefined (type *g has no field or method stkbarPos)
/usr/local/go/src/runtime/mstkbar.go:248:41: undefined: stkbar
/usr/local/go/src/runtime/mstkbar.go:227:19: too many errors

有任何想法吗 ?实际上,任何golang版本升级都会出现此错误,而不仅仅是我在此处提到的版本。

PS在发出时也会出现相同的错误:go get -v -t./ ...

go install
2个回答
29
投票

解决方案:在安装新的go版本之前,必须首先删除之前的golang安装

type go    # issue this to confirm where your go lives

一个典型的输出:

go is /usr/local/go/bin/go  # delete /usr/local/go not just /usr/local/go/bin/go

所以只需删除它

sudo rm -rf /usr/local/go  #  OP's missing step else above errors

在安装新版本之前

export golang_ver=$(curl https://golang.org/VERSION?m=text 2> /dev/null)
wget https://storage.googleapis.com/golang/${golang_ver}.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf ${golang_ver}.linux-amd64.tar.gz

2
投票

我用的是Windows10。我必须使用控制面板卸载go18(当他要求卸载prev版本时,不要相信1.9安装程序 - 手动完成)。之后我删除了c:\ go - 默认的goroot,只有在此之后 - 安装1.9。在我的情况下它是1.9.2当然检查你的GOROOT && GOPATH

© www.soinside.com 2019 - 2024. All rights reserved.