英文:
6g treating complete flag as output flag resulting in "pack: cannot open" error
问题
我开始在所有我的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 env
:
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"
英文:
Started getting a pack: cannot open
error on all my go projects.
Tried to run a simple go file:
main.go:
<pre><code>package main
import "fmt"
func main() {
fmt.Println("Hello, playground")
}
</code></pre>
and got the same result:
<pre><code>$ go run main.go
command-line-arguments
pack: cannot open $WORK/command-line-arguments/_obj/go.6
</code></pre>
I did have a new file in the directory called mplete
which seemed to be the output from the 6g compiler.
running the steps output from go run -x main.go
manually I found the 6g compiler is taking the flag -complete
and reading it as -o mplete
. Which sets the output file to meplete
<pre><code>$ 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
</code></pre>
Changing the -complete
flag changed the file that was output:
<pre><code>$ 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
</code></pre>
My go evn
<pre><code>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"
</code></pre>
答案1
得分: 1
搞定了!
我在我的机器上安装了两个版本的Go:
/usr/local/go
中的 go1.0.3
和
/usr/local/bin/go
中的 go1.1.1
which go
命令会使用 go1.1.1,但由于 GOROOT 设置为 /usr/local/go
,所以构建过程使用的是旧的 6g 编译器!
英文:
Figured it out!
I had two version of go installed on my machine:
go1.0.3 in /usr/local/go
and
go1.1.1 in /usr/local/bin/go
which go
would use go1.1.1 but since GOROOT was set to /usr/local/go
the build was using the old 6g compiler!!
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论