0

我的所有 go 项目都开始pack: cannot open出错。

尝试运行一个简单的 go 文件:

main.go:

package main

import "fmt"

func main() {
    fmt.Println("Hello, playground")
}

并得到相同的结果:

$ go run main.go
# command-line-arguments
pack: cannot open $WORK/command-line-arguments/_obj/_go_.6

我确实在名为的目录中有一个新文件,mplete它似乎是 6g 编译器的输出。

手动运行步骤输出,go run -x main.go我发现 6g 编译器正在获取标志-complete并将其读取为-o mplete. 它将输出文件设置为meplete

$ ls
main.go  work_tmp
$ /usr/local/go/pkg/tool/linux_amd64/6g -o $WORK/command-line-arguments/_obj/_go_.6 -p command-line-arguments -complete -D _/tmp/taco -I $WORK ./main.go
$ ls
main.go  mplete  work_tmp

更改-complete标志会更改输出的文件:

$ ls
main.go  work_tmp
$ /usr/local/go/pkg/tool/linux_amd64/6g -o $WORK/command-line-arguments/_obj/_go_.6 -p command-line-arguments -cotaco -D _/tmp/taco -I $WORK ./main.go
$ ls
main.go  taco  work_tmp

我的go evn

GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/jpoz/go"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread"
CGO_ENABLED="1"
4

1 回答 1

1

弄清楚了!

我的机器上安装了两个版本的 go:

go1.0.3 in/usr/local/go 和 go1.1.1 in/usr/local/bin/go

which go将使用 go1.1.1 但由于 GOROOT 设置为/usr/local/go构建使用的6g 编译器!

于 2013-10-30T21:53:42.740 回答