go语言串口通话 golang串口( 四 )


这里又有一个问题 , 不就是一个交叉编译工具吗?为什么又叫交叉工具链呢?原因很简单,程序不能光编译一下就可以运行,还得进行汇编和链接等过程,同时还需要进行调试,对于一个很大工程,还需要进行工程管理等等,所以,这里 说的交叉编译工具是一个由 编译器、连接器和解释器 组成的综合开发环境 , 交叉编译工具链主要由binutils(主要包括汇编程序as和链接程序ld)、gcc(为GNU系统提供C编译器)和glibc(一些基本的C函数和其go语言串口通话他函数的定义) 3个部分组成 。有时为了减小libc库的大?。?也可以用别的 c 库来代替 glibc,例如 uClibc、dietlibc 和 newlib 。
那么 , 如何得到一个交叉工具链呢?是从网上下载一个“程序”然后安装就可以使用了吗?回答这个问题之前先思考这样一个问题,我们的交叉工具链顾名思义就是在PC机上编译出能够在我们目标开发平台比如ARM上运行的程序,这里就又有一个问题了,我们的ARM处理器型号非常多,难道有专门针对我们某一款的交叉工具链吗?若果有的话,可以想一想,这么多处理器平台,每个平台专门定制一个交叉工具链放在网络上,然后供大家去下载,想想可能需要找很久才能找到适合你的编译器,显然这种做法不太合理,且浪费资源!因此 , 要得到一个交叉工具链,就像我们移植一个Linux内核一样,我们只关心我们需要的东西 , 编译我们需要的东西在我们的平台上运行 , 不需要的东西我们不选择不编译 , 所以 , 交叉工具链的制作方法和系统移植有着很多相似的地方,也就是说,交叉开发工具是一个支持很多平台的工具集的集合(类似于Linux源码),然后我们只需从这些工具集中找出跟我们平台相关的工具就行了,那么如何才能找到跟我们的平台相关的工具 , 这就是涉及到一个如何制作交叉工具链的问题了 。
通常构建交叉工具链有如下三种方法:
方法一 : 分步编译和安装交叉编译工具链所需要的库和源代码,最终生成交叉编译工具链 。该方法相对比较困难,适合想深入学习构建交叉工具链的读者 。如果只是想使用交叉工具链,建议使用下列的方法二构建交叉工具链 。
方法二:通过Crosstool-ng脚本工具来实现一次编译 , 生成交叉编译工具链,该方法相对于方法一要简单许多,并且出错的机会也非常少,建议大多数情况下使用该方法构建交叉编译工具链 。
方法三 : 直接通过网上下载已经制作好的交叉编译工具链 。该方法的优点不用多说,当然是简单省事,但与此同时该方法有一定的弊端就是局限性太大,因为毕竟是别人构建好的 , 也就是固定的,没有灵活性,所以构建所用的库以及编译器的版本也许并不适合你要编译的程序,同时也许会在使用时出现许多莫名其妙的错误 , 建议读者慎用此方法 。
crosstool-ng是一个脚本工具 , 可以制作出适合不同平台的交叉编译工具链,在进行制作之前要安装一下软件:
$ sudo apt-get install g++ libncurses5-dev bison flex texinfo automake libtool patch gcj cvs cvsd gawk
crosstool脚本工具可以在下载到本地 , 然后解压 , 接下来就是进行安装配置了,这个配置优点类似内核的配置 。主要的过程有以下几点:
1. 设定源码包路径和交叉编译器的安装路径
2. 修改交叉编译器针对的构架
3. 增加编译时的并行进程数,以增加运行效率,加快编译 , 因为这个编译会比较慢 。
4. 关闭JAVA编译器 ,减少编译时间

推荐阅读