1.为什么要有交叉编译器?

\qquad一般电脑是X86架构,而单片机一般不是,比如单片机是ARM架构,那么gcc编译生成的程序只能在X86的架构上运行,而不能在ARM架构上运行,所以需要交叉编译器编译生成能在ARM架构上运行的程序。
\qquad查看一个可执行程序,究竟属于哪个架构,可以使用file命令。比如有.c文件hello.c。

gcc hello.c -o hello  #生成可执行文件hello
file hello

\qquad运行结果:

hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=bf1698069c3282a51cf380a29c30a8a9062e270e, for GNU/Linux 3.2.0, not stripped

2.安装交叉工具链

\qquad安装过程很简单,就是解压缩的过程。
\qquad第一步:解压到linux标准目录,一般解压到/usr/local/arm/下面。
\qquad第二步:添加环境变量:编辑/etc/environment ,然后添加把交叉工具链的bin目录的绝对路径,注意一定要在原PATH中添加,不要另外起一行,然后source;如果要是使用时,采用绝对路径,可以不用第二步添加环境变量。

sudo vim /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/arm/gcc-linaro-5.3.1-2016.05-x86_64_arm-linux-gnueabi/bin"
source /etc/environment

3.使用

\qquad 3.1使用的简单方式,需要添加环境变量。当时当有多个编译器时,可能会出现问题

arm-linux-gnueabi-gcc hello.c -o hello

\qquad 3.2 使用绝对路径方法,使用比较复杂,但是准确

/usr/local/arm/gcc-linaro-5.3.1-2016.05-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc hello.c -o hello

4.添加32位lib

\qquad交叉编译器是在32位系统上制作的,所以需要用到32位的lib;如果我们的linux系统是64位的,可以有时候会出现无法找到交叉编译器命令的问题,这个问题有可能是使用简单交叉编译器命令而没有添加环境变量,也有可能是没有添加32位的lib。下面介绍如何添加32位lib。
\qquadUbuntu12.04以前的版本:sudo apt-get install ia32-libs
\qquadubuntu12.04以后的版本:sudo apt-get install libc6:i386 sudo apt-get install lib32z1

5.查看交叉编译器版本和使用

\qquad查看版本:arm-linux-gnueabi-gcc -v
\qquad目录下有一个hello.c文件,我们使用交叉编译器编译,然后使用file命令查看,程序运行的架构。

arm-linux-gnueabi-gcc hello.c -o hello  #编译
file hello

\qquad运行结果:hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux2.6.32,BuildID[sha1]=20ab9e34b81a80b48ed4a048a4db4bb2d09378e2, with debug_info, not stripped

linux的系统移植——交叉编译器相关推荐

  1. zybo上运行linux,Zybo开发板linux作业系统移植

    文章主要介紹zybo board上linux作业系统移植过程.分别介绍了开发环境搭建.U-boot编译.linux内核编译.busybox制作等流程及注意事项.文章使用的开发板是zynq 7000系列 ...

  2. Linux之系统移植与根文件系统构建

    Linux之系统移植与根文件系统构建 1.Uboot 1. 什么是Uboot: 一个裸机程序 就是一个bootloader用于启动Linux或其他系统 最主要的工作就是初始化DDR.因为Linux是运 ...

  3. linux的系统移植——序言

    1.单片机裸机和带有操作系统OS的区别 \qquad裸机有三层,从上至下依次为:应用层.驱动层.硬件层:而带有OS的单片机有四层,从上至下依次为:应用层.内核层.驱动层.硬件层. 2.系统移植学习内容 ...

  4. linux的驱动开发——交叉编译器

    1.交叉编译器 \qquadARM裸机.Uboot移植.linux移植这些都需要在linux系统上进行编译,编译就需要编译器.在linux系统中,可以使用gcc命令对c语言程序进行编译,但gcc编译器 ...

  5. 在linux运行math_neon库,linux - 仅使用带交叉编译器的本地库 - 堆栈内存溢出

    我正在尝试在linux上使用交叉编译器构建一个应用程序. 应用程序基于OpenEmbedded项目. 编译器和所有交叉编译的库都位于build文件夹中. 但是对于一个包构建脚本试图使用我的linux环 ...

  6. linux的系统移植——交叉编译工具集

    1.交叉编译工具集 \qquad 在我们安装交叉工具集时,不仅安装了arm-linux-gnueabi-gcc ,还安装了很多工具,它们共同构成交叉编译工具集. arm-linux-gnueabi-a ...

  7. arm linux gcc交叉编译,arm-linux-gcc交叉编译器安装

    在网上下载arm-linux-gcc-4.4.3.tar.gz. 1.解压#tar -zxvf arm-linux-gcc-4.4.3.tar.gz 2.打开解压目录,将FriendlyARM文件夹拷 ...

  8. 嵌入式Linux开发——系统移植篇回顾

    前言: 最近在学习正点原子Linux开发板u-boot.内核移植,根文件系统构建的相关内容,本文旨在起到一个流程梳理.宏观地把握整个移植u-boot.kernel,构建文件系统过程的作用,像Makef ...

  9. vs linux 交叉编译,Visual Studio交叉编译器提供对ARM的支持

    只要ARM平台能够运行Windows,Visual Studio就有能力拓展ARM平台.在Visual Studio 2017 15.5预览版2中,该IDE通过使用GCC编译器,增加了对基于ARM的计 ...

最新文章

  1. 享受便利的应用方式—Linux系统三则超酷技巧
  2. Oracle-AWR性能报告解读
  3. [转]opensuse 更新源
  4. 备案号链接工信部_工信部备案系统启用新域名
  5. Carbon和Polacode教程
  6. SQLAlchemy ORM教程之二:Query
  7. python打开csv文件绘制折线图,[转载]python绘制简单折线图
  8. django报错:ImproperlyConfigured和AppRegistryNotReady
  9. 物联网3A格局:阿里云、亚马逊等入选Gartner最新全球物联网竞争报告
  10. matlab虚拟现实之建立simulink虚拟现实工具箱的使用
  11. 第2节 mapreduce深入学习:15、reduce端的join算法的实现
  12. python导入第三方库dlib报错解决
  13. aes解密流程图_aes流程图(apqp五个阶段流程图)
  14. java dwg转pdf_CAD处理控件Aspose.CAD转换功能演示:使用Java将DWG和DXF文件转换为PDF...
  15. 电子签名具备法律效力吗?这些知识点你需要了解
  16. 以下关于c语言程序中函数的说法正确的是( ),以下关于C语言程序中函数的说法正确的是:(  )...
  17. 围棋博弈程序的实现与思考(4)——棋盘的数据结构
  18. mybatis-day04-改进多表查询collection配置、延迟加载、缓存、注解开发(★)
  19. c++ 进制转换 十六进制转八进制
  20. 分享几个默认密码在线查询网站

热门文章

  1. 天池 在线编程 音乐组合
  2. LeetCode 291. 单词规律 II(回溯)
  3. LeetCode 1325. 删除给定值的叶子节点(递归)
  4. 程序员面试金典 - 面试题 16.03. 交点(数学)
  5. 程序员面试金典 - 面试题 01.02. 判定是否互为字符重排(哈希map)
  6. LeetCode 1017. 负二进制转换(负数进制转换)
  7. LeetCode 67. 二进制求和
  8. LeetCode 90. 子集 II(回溯+剪枝)
  9. mqtt如何判断设备离线_反渗透纯水设备膜元件如何离线清洗?
  10. 斯特林发动机图纸尺寸_南昌教学模型订做,航空发动机模型_境海模型