2016-05-12 51 views
1

我想從源代碼構建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

1.永遠不要設置GOROOT。 2構建提示,例如'GOROOT_BOOTSTRAP =/path/to/go1.6/go/tool。/ make.bash' – Volker

+0

另外,請勿將go1.4/bin放入PATH中。 – JimB

+0

@Volker:好的我不使用GOROOT,但是GOROOT_BOOSTRAP應該指向一個現有的GO編譯器。我更新了這個問題,但問題仍然存在。 – psadac

回答

0

錯誤消息指出CGO,以及控制make.bash環境變量在文件的開頭解釋:

CGO_ENABLED:控制在生成過程中使用CGO。將其設置爲1 以在構建中包含所有與cgo相關的文件,.c和.go文件,其中包含「cgo」 構建指令。將其設置爲0即可忽略它們。

所以如果你禁用CGO同時建立GO 1.4:

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

一切正常,並通過測試。