从源代码构建go编译器时出错

时间:2016-05-12 16:33:28

标签: linux go build

我正在尝试从源代码构建Go的最新版本(主分支的提示)。

Go官方文档(https://golang.org/doc/install/source)声明您应该下载Go 1.4二进制文件以构建更新版本。但是应该可以从源代码构建所有内容。

为此,我在.bashrc中设置变量:

PATH="$HOME/go/bin:$PATH"
export GOPATH=$HOME

然后从源代码构建1.4:

source ~/.bashrc
git clone https://go.googlesource.com/go
mkdir ~/go1.4
cd ~/go
git archive --format=tar go1.4.3 |tar -xv -C ~/go1.4
cd ~/go1.4/src
./make.bash

最后构建最新版本:

cd ~/go/src/
GOROOT_BOOTSTRAP=$HOME/go1.4 ./make.bash

我记得几个月前这样做没有问题,但今天我发现这些错误建立了1.4 make.bash

# cmd/pprof
.../go1.4/pkg/linux_amd64/runtime/cgo.a(_all.o): unknown relocation type 42; compiled without -fpic?
.../go1.4/pkg/linux_amd64/runtime/cgo.a(_all.o): unknown relocation type 42; compiled without -fpic?
runtime/cgo(.text): unexpected relocation type 298
runtime/cgo(.text): unexpected relocation type 298
...

我的方法有问题吗?

1 个答案:

答案 0 :(得分:0)

错误消息指向CGO,控制make.bash的环境变量在文件开头解释:

  

CGO_ENABLED:在构建期间控制cgo使用。将其设置为1   包含所有与cgo相关的文件,.c和.go文件包含" cgo"   构建中的build指令。将其设置为0以忽略它们。

所以如果在构建GO 1.4时禁用CGO:

cd ~/go1.4/src
CGO_ENABLED=0 ./make.bash

一切正常并通过测试。