zoukankan      html  css  js  c++  java
  • 交叉编译工具简介

    红心前言

    交叉编译,即在一种平台上编译,并能够运行在另一种体系结构完全不同的平台上。交叉编译使用的工具,一般称为交叉编译工具,由于它是由多个程序构成,所以又称为交叉编译工具链。

    交叉开发工具链就是为了编译、链接、处理和调试跨平台体系结构的程序代码。每次执行工具链软件时,通过带有不同的参数,可以实现编译、链接、处理或者调试等不同的功能。

    红心工具链的组成

    工具链一般由编译器、连接器、解释器和调试器组成。

    Linux下经常使用的工具链软件有:Binutils、GCC、Glibc和Gdb。

    Binutils是二进制程序处理工具,包括连接器、汇编器等目标程序处理的工具。

    GCC(GNU Compiler Collection)是编译器,支持C/C++等多种语言。对于C/C++语言的完整支持,需要Glibc库。

    Glibc是应用程序编程的函数库软件包,可以编译生成静态库和共享库,完整的GCC需要支持Glibc。

    Gdb是调试工具,可以读取可执行程序中的符号表,对程序进行源码调试。

    通过这些软件包,可以生成gcc、g++、ar、as、ld等编译链接工具,还可以生成glibc库和gdb调试器。在生成交叉开发的工具链时,可以在文件名字上加一个前缀,用来区别本地的工具链,例如,arm-linux-gcc,表示这个编译器用于编译在Linux系统下ARM目标平台上运行的程序。

    红心构建工具链

    在裁剪用于嵌入式系统的Linux内核时,由于嵌入式系统的存储大小有限,所以我们需要的链接工具也可根据嵌入式系统的特性进行制作,建立自己的交叉编译工具链。例如,有时为了减少Glibc库的大小,可以考虑用uclibc、dietlibc或者newlib库赖代替Glibc库,这时就需要自己动手进行交叉编译工具链的构建。由于Linux交叉编译工具链使用和GNU一样的工具链,而GNU的工具和软件都是开发源码的,所以只需从GNU网站 http://www.gnu.org 或者镜像网站(http://baike.baidu.com/link?url=RdaR4T7Ptp3kOmYKBeRhgFxwW3juKAr4Y-G8DpvUqj0vRKdRMvZqgjwKGSVPO_0A)下载源码后,根据需要进行裁剪,然后编译即可。

    当然,构建交叉编译工具链是一个相当复杂的过程,如果不想经历这一过程,可以在网上下载一些编译好的工具链。

    构建交叉编译器的第一个步骤就是确定目标平台。在GNU系统中,每个目标平台都有一个明确的格式,这些信息用于在构建过程中识别要使用的不同工具的正确版本。因此,当在一个特定目标机下运行GCC时,GCC便在目录路径中查找包含该目录规范的应用程序路径。GNU的目标规范格式为CPU-PLATFORM-OS。例如,x86/i386目标机名为i686-pc-linux。我们这里要建立基于ARM平台的交叉工具链,所以目标平台名为arm-linux。

    通常,构建交叉编译工具链有如下三种方法:

    (1)分步编译和安装交叉编译工具链所需要的库和源代码,最终生成交叉编译工具链。该方法相对比较困难,如果只是想使用交叉编译工具链,建议使用下面方法。

    (2)通过Crosstool脚本工具来实现一次编译,生成交叉编译工具链,该方法相对方法(1)简单许多,并且出错的机会也非常少,建议大多数情况下使用该方法构建交叉编译工具链。

    (3)直接通过网上下载已经制作好的交叉编译工具链。优点很明显:简单易行。弊端:局限性太大,因为毕竟是别人构建好的,也就是固定的,没有灵活性,所以构建所用的库以及编译器的版本也许并不适合你要编译的程序,同时也许会在使用时出现许多莫名其妙的错误,建议慎用此方法。

    自行构建交叉编译工具链时所需要的资源可从以下两个网站获取:

    ftp.kernel.org

    ftp.gnu.org

  • 相关阅读:
    swift知识点 [1]
    Scala的安装,入门,学习,基础
    导入别人的项目源码,如何才可以正常运行呢???
    java.io.IOException: Could not locate executable nullinwinutils.exe in the Hadoop binaries.
    网站点击流数据分析项目----之现学现卖
    我的博客即将搬运同步至腾讯云+社区
    sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)
    工作流调度器azkaban(以及各种工作流调度器比对)
    日志采集框架Flume以及Flume的安装部署(一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统)
    Hive thrift服务(将Hive作为一个服务器,其他机器可以作为客户端进行访问)
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3656321.html
Copyright © 2011-2022 走看看