linux下编译go文件,Linux系统编译安装Go1.9.2

wget https://storage.googleapis.com/golang/go.src.tar.gz

tar -zxvf go.src.tar.gz

sudo mv go /user/local/

默认放到/user/local/目录下,然后进行安装

cd /usr/local/go/src

./all.bash

执行之后发现报错

vagrant@homestead:/usr/local/go/src$ ./all.bash

##### Building Go bootstrap tool.

cmd/dist

ERROR: Cannot find /home/vagrant/go1.4/bin/go.

Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.

为什么会报错找不到go1.4呢?不是还没安装呢吗?原来编译GO 1.6版本以上的需要依赖GO 1.4版本的二进制

于是要先编译安装1.4版本

首先要确定是否安装了 gcc和glibc-devel

$ cd ~/

$ git clone git@github.com:golang/go.git

$ cd go/

$ git checkout -b 1.4 go1.4 //将远程的go1.4分支checkout

$ cd ~/go/src

$ sudo ./all.bash

$ cp -rf ~/go/ ~/go1.4

编译过程中遇到了报错

# cmd/pprof

/home/vagrant/go/pkg/linux_amd64/runtime/cgo.a(_all.o): unknown relocation type 42; compiled without -fpic?

/home/vagrant/go/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

解决方案:

$ cd ~/go1.4/src

$ sudo CGO_ENABLED=0 ./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.在构建过程中控制cgo的使用。当设置为1,在构建时,会包含所有cgo相关的文件,如带有”cgo”编译指令的.c和.go文件。当设置为0,则忽略它们(即禁用CGO)

编译完了go1.4版本,然后就可以编译v1.9.2了

$ cd ~/go

$ git clean -dfx //删除当前目录下所有没有track过的文件. 不管他是否是.gitignore文件里面指定的文件夹和文件

$ git checkout -b 1.9.2 go1.9.2

$ cd ~/go/src

$ sudo ./all.bash

配置环境变量

在 ~/.profile文件末尾追加如下命令,在打开一个回话的时候,会自动执行~/.profile,配置环境变量

export GOROOT=/usr/local/go

export PATH=$PATH:$GOROOT/bin

export GOPATH=/usr/local/go/production

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值