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

标签 linux go build

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

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

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

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

然后从源代码构建 go 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

我记得几个月前这样做没有问题,但今天我在构建 go 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
...

我的方法有问题吗?

最佳答案

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

CGO_ENABLED: Controls cgo usage during the build. Set it to 1 to include all cgo related files, .c and .go file with "cgo" build directive, in the build. Set it to 0 to ignore them.

因此,如果您在构建 GO 1.4 时禁用 CGO:

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

一切正常并通过测试。

关于linux - 从源代码构建 go 编译器时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37192696/

相关文章:

http - 如何非破坏性地检查 HTTP 客户端是否已关闭连接?

build - Gradle 全局构建目录

go - 如何在没有文字 bin、pkg 和 src 目录的情况下构建 Go?

linux - 允许从一个站点播放 rtmp(带有 rtmp 模块的 nginx)

linux - 如何将 file_name.csv.gz 文件解压缩为 .csv

python - 如何用另一个环境替换 conda root 环境?

for-loop - 如何在 Go 中为循环变量声明变量类型?

json - 如何解析/反序列化动态 JSON

jakarta-ee - 将 EAR 部署到 WebSphere 时,出现 "duplicate entry"SaveFailureException 的原因是什么?

linux - 使用 wget 从 url 下载文件