go/src/make.bash阅读

今天看到@polaris1119的这篇分析源码安装Go的过程(初稿)

至今还没仔细看过make.bash的内容。这篇算是阅读笔记了。

环境变量

首先是make.bash中用到的环境变量:

GOROOT_FINAL:Go源码的根目录,这个变量的是在gcc的时候使用的,如果你设置了这个,gcc的-D参数就是你设置的

GOHOSTARCH:Go所在的宿主机器的架构,当然这里指的是CPU的架构

GOARCH:安装包和工具所在的机器的架构。

GOOS:安装包和工具所在的机器的操作系统。

GO_GCFLAGS:是否要在编译的时候需要带上5g/6g/8g的参数

GO_LDFLAGS:是否要在链接的时候带上5l/6l/8l的参数

CGO_ENABLED:是否能使用cgo

 

对于环境变量,你可以在编译完成后使用dist工具来查看,比如:

yejianfengtekiMacBook-Air:darwin_amd64 yejianfeng$ ./dist env

GOROOT="/Users/yejianfeng/software/go"

GOBIN="/Users/yejianfeng/software/go/bin"

GOARCH="amd64"

GOOS="darwin"

GOHOSTARCH="amd64"

GOHOSTOS="darwin"

GOTOOLDIR="/Users/yejianfeng/software/go/pkg/tool/darwin_amd64"

GOCHAR="6"

 

为什么有GOARCH和GOHOSTARCH的分别?

下面一个情境:amd64的机器上,下载了一份源码,所以GOHOSTARCH是设置成为AMD64,但是我现在想写的是Intel X86-32的Go可执行文件,所以设置GOARCH为Intel86。这就是交叉编译的概念。

当然这两个环境变量是在编译出go工具的时候才有用,具体的编译go代码就没用了。

 

GOTOOLDIR是什么?

go tool命令后面可以跟其他的工具,比如pprof, yacc, api等。go tool实质上只是一个转发命令给这些工具,这些工具的源代码是放在goroot/src/cmd下面,这些工具的源码编译之后生成的二进制可执行文件就放在$GOTOOLDIR里面,具体的路径就在goroot/pkg/tool/(darwin_amd64)/下。

这个变量是在这句话中设置的

eval $(./cmd/dist/dist env -p)

go_bootstrap是什么?

 

我们可以看到go_bootstrap这个工具是使用dist工具bootstrap生成的。然后再使用go_bootstrap install来编译go的包。最后又悄悄地把go_bootstrap删掉。

我们还原一下,进入GOTOOLDIR,调用./dist bootstrap重新生成go_bootstrap

运行下你会发现,原来就是bin/go嘛,但是再看看大小,只有3M多,而完整的bin/go有5.6M。

所以可以推断go_bootstrap是包含了基本的go代码编译能力的工具。

整个make的流程是什么样的?

其实也是几句话就能说清楚:

1 先gcc编译出dist

2 dist编译出go代码基本编译器go bootstrap

3 用go bootstrap编译出go的src中的其他go源码

4 将其他所有工具生成放在src/cmd下供bin/go使用

时间: 2024-11-18 03:36:02

go/src/make.bash阅读的相关文章

Linux(Ubuntu)下设置golang环境变量

1).源代码安装go语言 Go的工具链采用C语言编写,要构建它,你需要安装一个C编译器,本例采用gcc工具; 进入linux 终端,输入命令行 sudo apt-get install build-essential Go使用Mercurial进行版本管理,首先你必须安装了Mercurial,对于 Ubuntu/Debian 系统先安装easy_install; sudo apt-get install mercurial 出现Processing triggers for python-sup

MySQL中设置prompt实现信息提示的教程

然后来看看默认情况下的样子 在看看 使用prompt参数后的样子 然后看看黑科技的玩法 好了 现在来说说最后彩色显示的方法,默认在使用--prompt参数后是显示不出彩色的,为了显示彩色,我们需要借助系统上功能才可以的, [root@GCE-Node1_www.dwhd.org ~]# awk '/mariadb/' .bashrc alias mysql=$(echo -e '/usr/local/mariadb-galera/bin/mysql -uroot -p****** -h127.0

gcc-关于make错误的问题 急!!!

问题描述 关于make错误的问题 急!!! make all-recursive make[1]: Entering directory /root/下载/acsccid-1.0.0' Making all in m4 make[2]: Entering directory/root/下载/acsccid-1.0.0/m4' make[2]: Nothing to be done for all'. make[2]: Leaving directory/root/下载/acsccid-1.0.0

Ubuntu 10.4 下安装gSOAP安装过程和问题解决

在本文中,所有程序均在Linux下开发完成,经测试能够正常运行. 在开发过程中,我们需要用到gSOAP,可以从以下网址下载获得:我下载的是gsoap_2.7.12.tar.gzhttp://www.cs.fsu.edu/~engelen/soap.html 下载下来解压缩,按正常安装过程进行编译.安装. # tar zxvf gsozp_2.7.12.tar.gz # cd gsoap_2.7.12 # ./configure –-prefix=/usr/local/gSOAP(指定安装路径)

GCC知识

像C语言这样的静态语言,运行的步骤是先将C经过编译器转化成汇编语言,汇编语言再经过汇编器转化成机器语言模块,然后链接器将程序的机器语言模块和库程序的机器语言模块和起来,生成可执行文件,最后再由加载器加载这个可执行文件,产生输入输出.   在这个环节中,gcc就是扮演着编译器的角色.gcc原本只能编译C语言,但是后来,经过扩展之后也能处理JAVA/OC等语言了.GCC现在已经成为类Unix操作系统的标准编译器了.所以在linux上源码编译软件前大都要先安装gcc. gcc只是编译器吗? gcc可以

linux下Golang安装配置教程

做为运维人员,使用python语言足矣,理论上是无需了解golang的.不过最近发现一个新潮的监控系统都是基于golang进行开发的,如小米公司的Open-Falcon(github项目页) .stack exchange 公司的Bosun (github项目页). 一.Go的三种安装方式 Go有多种安装方式,你可以选择自己喜欢的.这里我们介绍三种最常见的安装方式: Go源码安装:这是一种标准的软件安装方式.对于经常使用Unix类系统的用户,尤其对于开发者来说,从源码安装可以自己定制. Go标准

Fedora14 Linux系统安装Golang开发环境笔记_Golang

我的环境为Fedora14, Go有多种安装方式,我的这里介绍两种的安装方式: 一.Go源码安装 Go使用Mercurial进行版本管理,首先你必须安装了Mercurial,然后才能下载. 1.首先安装Mercurial(获取hg命令) 复制代码 代码如下: [root@localhost ~]# yum install mercurial  2.设置环境变量GOROOT作为Go的安装目录 复制代码 代码如下: [root@localhost ~]# mkdir /home/go/    [ro

ubuntu下搭建Go语言(golang)环境_Golang

Go语言是谷歌2009发布的第二款开源编程语言.Go语言专门针对 多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全.支持并行进程. 还是我自己的电脑,我自己安装的是ubuntu 12.04版本的,直接介绍安装吧!其实搭建环境很简单! 复制代码 代码如下: sudo apt-get install python-setuptools python-dev build-essential //安装mercurial依赖 sudo easy_insta

Ubuntu安装Go语言运行环境_Golang

在ubuntu论坛上看到一个抓取网页里的图片数据的帖子,于是就想着用GO语言来试下.那么先安装一个运行环境吧.以下安装方式在32位和64位的ubuntu12.04上都安装成功,并且所有命令,程序我都实际运行过,如果有问题,请给我留言. 1.安装Mercurial Mercurial是一个版本控制系统,一会要用这个工具下载Go语言的源码.在ubuntu下就用apt-get安装就OK了,非常方便. 复制代码 代码如下: sudo apt-get install mercurial 2.下载Go语言源