arm源码编译go语言 arm gcc编译器

arm-linux-gcc怎么编译自己写的头文件linux gcc编译c文件头文件
linux gcc编译c文件头文件,使用GCC编译器编译C语言
凶猪下山
转载
关注
0点赞·1047人阅读
GCC编译C源代码有四个步骤:预处理—-编译—-汇编—-链接 。
可以利用GCC的参数来控制执行的过程,这样就可以更深入的了解编译C程序的过程 。
下面将通过对一个程序的编译来演示整个过程 。
#include
int main()
{
printf("happy new year!\n");
return 0;
}
1:预处理:编译器将C程序的头文件编译进来 , 还有宏的替换,可以用gcc的参数-E来参看 。
预处理 命令:gcc -E hello.c -o hello.i
作用:将hello.c预处理输出hello.i
2:编译:这个阶段编译器主要做词法分析、语法分析、语义分析等,在检查无错误后后,把代码翻译成汇编语言 。可用gcc的参数-S来参看 。
编译器(ccl)将文本文件hello.i 翻译成文本文件hello.s, 它包含一个汇编语言程序 。汇编语言程序中的每条语句都以一种标准的文本格式描述了一条低级机器语言指令 。
编译命令:gcc -S hello.i -o hello.s
作用:将预处理输出文件hello.i汇编成hello.s文件
3:汇编:把编译阶段生成的.s 文件转换为二进制目标代码 。可用gcc的参数-c来参看 。汇编器(as)将hello.s翻译成机器语言指令,把这些指令打包成可重定位目标程序的格式 , 并将结果保存在目标文件hello.o中 。hello.o文件是一个二进制文件 , 它的字节编码是机器语言 。
汇编 命令:gcc -c hello.s -o hello.o
作用:作用:将汇编输出文件hello.s编译输出hello.o文件
4:链接:把obj文件链接为可执行的文件:链接器(ld)负责.o文件的并入 。结果就是hello文件,它是一个课执行的目标文件,可以加载到存储器后由系统调用 。
链接命令:gcc hello.o -o hello
一步操作的话是: (-o必须在hello之前 )
$gcc hello.c -o hello
$./hello或者:(会默认生成a.out文件)
$gcc hello.c
$./a.out
如何制作arm-linux-gcc编译工具一、下载源文件
源代码文件及其版本:
binutils-2.19.tar.bz2,gcc-core-4.4.4.tar.bz2gcc-g-4.4.4.tar.bz2 Glibc-2.7.tar.bz2 Glibc-ports-2.7.tar.bz2 Gmp-4.2.tar.bz2 mpfr-2.4.0.tar.bz2mpc-1.0.1.tar.gzLinux-2.6.25.tar.bz2 (由于我在编译出错的过程中arm源码编译go语言,根据出错的信息修改了相关的C代码arm源码编译go语言,故而没有下载相应的补?。?
一般一个完整的交叉编译器涉及到多个软件 , 主要包括bilinguals、cc、glibc等 。其中,binutils主要生成一些辅助工具;gcc是用来生成交叉编译器,主要生成arm-linux-gcc交叉编译工具,而glibc主要提供用户程序所需要的一些基本函数库 。
二、建立工作目录
编译所用主机型号 fc14.i686,虚拟机选的是VM7.0,Linux发行版选的是Fedora9,
第一次编译时用的是root用户(第二次用一般用户yyz), 所有的工作目录都在/home/yyz/cross下面建立完成,首先在/home/yyz目录下建立cross目录,然后进入工作目录,查看当前目录 。命令如下:
创建工具链文件夹:
[root@localhostcross]# mkdir embedded-toolchains
下面在此文件夹下建立如下几个目录:
setup-dir:存放下载的压缩包;
src-dir:存放binutils、gcc、glibc解压之后的源文件;
Kernel:存放内核文件 , 对内核的配置和编译工作也在此完成;
build-dir :编译src-dir下面的源文件,这是GNU推荐的源文件目录与编译目录分离的做法;
tool-chain:交叉编译工具链的安装位;
program:存放编写程序;
doc:说明文档和脚本文件;
下面建立目录,并拷贝源文件 。
[root@localhostcross] #cd embedded- toolchains
[root@localhostembedded- toolchains] #mkdir setup-dir src-dir kernel build-dir tool-chain program doc
[root@localhostembedded- toolchains] #ls
build-dir doc kernel program setup-dir src-dir tool-chain
[root@localhostembedded- toolchains] #cd setup-dir
拷贝源文件:
这里我们采用直接拷贝源文件的方法,首先应该修改setup-dir的权限
【arm源码编译go语言 arm gcc编译器】[root@localhostembedded- toolchains] #chmod 777 setup-dir
然后直接拷贝/home/yyz目录下的源文件到setup-dir目录中,如下图:
建立编译目录:
[root@localhostsetup-dir] #cd ../build-dir
[root@localhostbuild -dir] #mkdir build-binutils build-gcc build-glibc
三、输出环境变量
输出如下的环境变量方便我们编译 。
为简化操作过程 。下面就建立shell命令脚本environment-variables:
[root@localhostbuild -dir] #cd ../doc
[root@localhostdoc] #mkdir scripts
[root@localhostdoc] #cd scripts
用编辑器vi编辑环境变量脚本envionment-variables:[root@localhostscripts]
#vi envionment-variables
exportPRJROOT=/home/yyz/cross/embedded-toolchains
exportTARGET=arm-linux
exportPREFIX=$PRJROOT/tool-chain
exportTARGET_PREFIX=$PREFIX/$TARGET
exportPATH=$PREFIX/bin:$PATH
截图如下:
执行如下语句使环境变量生效:
[root@localhost scripts]# source ./environment-variables
四、建立二进制工具(binutils)
下面将分步介绍安装binutils-2.19.1的过程 。
[root@localhostscript] # cd $PRJROOT/src-dir
[root@localhostsrc-dir] # tar jxvf ../setup-dir/binutils-2.19.1.tar.bz2
[root@localhostsrc-dir] # cd $PRJROOT/build-dir/build-binutils
创建Makefile:
[root@localhostbuild-binutils] #../../src-dir/binutils-2.19.1/configure --target=$TARGET --prefix=$PREFIX
在build-binutils目录下面生成Makefile文件,然后执行make,make install,此过程比较缓慢 , 大约需要一个15分钟左右 。完成后可以在$PREFIX/bin下面看到我们的新的binutil 。
输入如下命令
[root@localhostbuild-binutils]#ls $PREFIX/bin
树莓派中怎么编译golang,求大神支招从源代码编译golang(sd) 还是编译go程序?
如果是编译go程序的话直接用go交叉编译一个linux/arm版本的可执行文件就行,可以装个gox, 能同时编译多个版本
如何编译arm linux的goGolang也就是Go语言 , 现在已经发行到1.4.1版本了 , 语言特性优越性和背后Google强大靠山什么的就不多说了 。Golang的官方提供了多个平台上的二进制安装包,遗憾的是并非没有发布ARM平台的二进制安装包 。ARM平台没办法直接从官网下载二进制安装包来安装,好在Golang是支持多平台并且开源的语言,因此可以通过直接在ARM平台上编译源代码来安装 。整个过程主要包括编译工具配置、获取Golang源代码、设置Golang编译环境变量、编译、配置Golang行环境变量等步骤 。
注:本文选用树莓派做测试,因为树莓派是基于ARM平台的 。
1、编译工具配置
据说下个版本的golang编译工具要使用golang自己来写,但目前还是使用C编译工具的 。因此 , 首先要配置好C编译工具:
1.1 在Ubuntu或Debian平台上可以使用sudo apt-get install gcc libc6-dev命令安装 , 树莓派的RaspBian系统是基于Debian修改的,所以可以使用这种方法安装 。
1.2 在RedHat或CentOS 6平台上可以使用sudo yum install gcc libc-devel命令安装 。
安装完成后可以输入 gcc --version命令验证是否成功安装 。
2、获取golang源代码
2.1 直接从官网下载源代码压缩包 。
golang官网提供golang的源代码压缩包,可以直接下载 , 最新的1.4.1版本源代码链接:
2.2 使用git工具获取 。
golang使用git版本管理工具,也可以使用git获取golang源代码 。推荐使用这个方法,因为以后可以随时获取最新的golang源代码 。
2.2.1 首先确认ARM平台上已经安装了git工具,可以使用git --version命令确认 。一般linux平台都安装了git,没有的话可以自行安装,不同平台的安装方法可以参考:
2.2.2 克隆远程golang的git仓库到本地
在终端cd到你想要安装golang的目录,确保该目录下没有名为go的目录 。然后以下命令获取代码仓库:
git clone
大陆地区可能会获取失败,在不翻墙的情况下我试了几次都没成功,原因大家都懂的 。好在google已经将golang也托管到github上面,所以也可以通过下面命令获?。?
git clone
视网络情况,下载可能需要不少时间 。我2M的带宽花了将近两个小时才下载完 , 虽然整个项目不过几十兆= =
下载完成后,可以看到目录下多了一个go目录,里面即为golang的源代码,在终端上执行cd go命令进入该目录 。
执行下面命令检出go1.4.1版本的源代码 , 因为现在已经有新的代码提交上去了,最新的代码可能不是最稳定的:
git checkout go1.4.1
至此,最新1.4.1发行版的源代码获取完毕
3、设置golang的编译环境变量
主要有GOROOT、GOOS、GOARCH、GOARM四个环境变量需要设置,先解释四个环境变量的意义 。
3.1 GOROOT
主要代表golang树结构目录的路径 , 也就是上面git检出的go目录 。一般可以不用设置这个环境变量,因为编译的时候默认会以go目录下src子目录中的all.bash脚本运行时的父目录作为GOROOT的值 。为了保险起见,可以直接设置为go目录的路径 。
3.2 GOOS和GOARCH
分别代表编译的目标系统和平台,可选值如下:
GOOSGOARCH
darwin386
darwinamd64
dragonfly386
dragonflyamd64
freebsd386
freebsdamd64
freebsdarm
linux386
linuxamd64
linuxarm
netbsd386
netbsdamd64
netbsdarm
openbsd386
openbsdamd64
plan9386
plan9amd64
solarisamd64
windows386
windowsamd64
需要注意的是这两个值代表的是目标系统和平台,而不是编译源代码的系统和平台 。树莓派的RaspBian是linux系统,所以这些GOOS设置为linux,GOARCH设置为arm 。
3.3 GOARM
表示使用的浮点运算协处理器版本号 , 只对arm平台有用,可选值有5,6 , 7 。如果是在目标平台上编译源代码,这个值可以不设置,它会自动判断需要使用哪一个版本 。
总结下来 , 在树莓派上设置golang的编译环境变量,可编辑$HOME/.bashrc文件,在末尾添加下面内容:
export GOROOT=你的go目录路径
export GOOS=linux
export GOARCH=arm
编辑完后保存,执行source ~/.bashrc命令让修改生效 。
4、编译源代码
环境变量配置完成自后就可以开始编译源代码 。在go目录下的src子目录中,主要有all.bash和make.bash两个脚本(另外还有两个all.bat和make.bat脚本适用于window平台) 。编译实际上就是执行其中一个脚本,两者的区别在于all.bash在编译完成后还会执行一些测试套件 。如果希望只编译不测试,可以运行make.bash脚本 。使用cd命令进入go下src目录,执行./all.bash或者./make.bash命令即可开始编译 。由于硬件情况不同,编译耗费的时间不同 。在我的B型树莓派编译过程花费了将近半个小时 , 编译完成后执行的测试套件又花费了差不多一个小时,总共花费了一个半小时左右 。
5、配置golang运行环境变量
编译完成后,go目录下会生成bin目录,里面就是go的运行脚本 。为了以后使用方法,可以将这个bin路径添加到PATH环境变量中 。同样编辑~/.bashrc文件,因为前面设置过GOROOT环境变量指向go目录了,所以只需要在末尾加上
export PATH=$PATH:$GOROOT/bin
保存后同样执行source ~/.bashrc命令让环境变量生效 。
至此 , golang源代码编译安装成功 。执行go version应该就能看到当前golang的版本信息,表示编译安装成功 。
Harbor在arm架构下亲测编译成功华为云arm架构安装Docker
arm架构安装docker-compose
Harbor官网:
Harbor官方没有提供arm架构arm源码编译go语言的包,需要自己编译,arm源码编译go语言我编译好的版本是:harbor-1.9.1
大家可以按arm源码编译go语言我的博客,自己去编译,或评论留言给我,我发给大家
我编译好的版本是: harbor-1.9.1
华为云arm架构docker启动redis报错:<jemalloc>: Unsupported system page size
默认账号/密码:admin/Harbor12345
把编译成功的镜像保存起来
有需要的,可以评论留言,发给大家
参考链接:
arm源码编译go语言的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于arm gcc编译器、arm源码编译go语言的信息别忘了在本站进行查找喔 。

    推荐阅读