我正在尝试从源代码构建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
...
我的方法有问题吗?
答案 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
一切正常并通过测试。