arm-elf-gcc交叉编译器的使用教程

一开始需要安装arm-elf-gcc,但是这是一个32位的程序,我是安装了64位的系统,据说安装ia32.libs依赖库能运行这个,但是看到博客上面前人安装完了系统图标少了一半,然后就怕了。经过了翻看ubuntu论坛和各种博客,才知道14版之后的ubuntu64位官方已经抛弃了ia32.libs这个依赖库,在源列表中也是找不到的。但是官方自身已经支持32位,自带32位依赖库,在根目录下面就有一个lib32文件夹。

安装教程

博主使用的是arm-elf-tools-20040427.sh的编译器,比较老旧,但不影响使用。

  1. 打开终端
  2. 切换到arm-elf-tools-200427.sh所在路径
  3. 增加执行权限

    sudo chmod 755 arm-elf-tools-20040427.sh
  4. 安装

    sudo sh arm-elf-tools-20040427.sh

以上,安装完成

注:文件arm-elf-tools-20040427.sh的大小有17M,这个脚本就是安装文件。没事不要用普通的文本编辑器打开,高级点的文本编辑器可以。

使用教程

首先上一份简单的测试代码

int max( int* pt, int size )
{
int max_v = -32768;
int* tmp = &pt[size];
int* pi = pt; while(pi<tmp){
if( *pi>max_v ){
max_v = *pi; }
pi++;
} return max_v;
}
  1. arm-elf-gcc -S max.c

    得到由c文件生成的汇编文件max.s

  2. arm-elf-gcc -c max.s

    由汇编文件编译得到Object文件max.o

  3. arm-elf-readelf -a max.o > max_elfinfo

    这个命令将给出全部的Object文件信息,保存在max_elfinfo这个文件中

  4. 查看一下max_elfinfo文件:ELF_header

  5. 查看一下max_elfinfo文件:Section_header



  6. hexdump -C max.o > max_hex

    直接打印出Object文件的全部字节,保存在max_hex文件中



    以上面的.real.text为例子

  7. Elf最后输出的内容



    .rel.text告诉链接器指令中的哪些地方需要做重定位;

    .symtab是符号表。Ndx列是每个符号所在的Section编号

  8. arm-elf-ld.real -o max2.out max.o

    链接指定Object文件,max2.out为生成的文件,max.o为源文件



    由于没有__gccmain函数入口,故有warning,此处先不管,绿色即为新生成文件

  9. 用readelf命令分析新生成的max2.out

    arm-elf-readelf -a max2.out > max2_elfinfo





  10. 调用不同c文件中的子函数

    程序修改后如下:





  11. 编译两份c文件生成 .o 文件

  12. arm-elf-ld.real -o main2.out main.o encrypt_char.o -lc

    main2.out是链接生成的文件,main.o encrypt_char.o是参与链接的源文件,-lc 允许链接器搜索默认的路径,当你使用了系统自带的头文件或子函数时,需要添加该选项以便链接器能顺利链接到对应库

  13. arm-elf-objdump -S main2.out > main2_1.s

    反汇编链接后的.out文件,和链接前的.o文件反汇编结果进行比较



    新生成的main2_1.s文件里面比原来的多了很多内容,最大的不同在于区分了各个文件的代码段





arm-elf-gcc交叉编译器的使用教程的更多相关文章

  1. Ubuntu 12.04 64bit GCC交叉编译器制作 原创

                                                                                                        ...

  2. ubuntu-14.10下,安装gcc交叉编译器遇到问题及解决方法

    一 下载gcc-arm-none-eabi-4_9 安装成功后上报错误: ./gcc-arm-none-linux-gnueabi-gcc: No such file or directory 网上查 ...

  3. window 安装gcc交叉编译器

    参考网址:  https://blog.csdn.net/zsy19881226/article/details/46952535

  4. Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法

    一.安装ARM-Linux-GCC工具链 只需要一句命令: sudo apt-get install gcc-arm-linux-gnueabi 前提是你的Ubuntu系统版本是官网支持的最新的版本, ...

  5. 【转】Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法

    原文网址:http://www.cnblogs.com/muyun/p/3370996.html 一.安装ARM-Linux-GCC工具链 只需要一句命令: sudo apt-get install ...

  6. W5300E01-ARM 交叉编译器(Cross Compiler)用户手册

    W5300E01-ARM是基于W5300的ARM功能测试评估板: 1      简介 当用户的开发环境与目标系统不同时就会用到交叉编译器. 例如,当开发基于ARM的嵌入式系统时,用户就需要在电脑上写出 ...

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

    需要交叉编译环境故安装交叉编译环境    1.在宿主机的/usr/local/arm目录存放交叉编译器        mkdir /usr/local/arm    2.解压交叉编译器包至/usr/l ...

  8. arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf的区别

    转自 https://www.cnblogs.com/linuxbo/p/4297680.html 命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eab ...

  9. arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别

    命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch – 体系架构,如ARM,MIPSvendor – 工具链提供商os – 目标操作系统 ...

随机推荐

  1. CSS阻止页面双击选中文本

    转载自:w3cui 在双击左右箭头,快速切换图片滚动时,会选择附近区域的文字,感觉不是很好,今天在同事在分享时,讲到了这个问题, 试了一下,不错,解决了问题IE及Chrome下的方法一样,对相应的元素 ...

  2. ios开发之OC基础-类和对象

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...

  3. 序列化和反序列化,异步调用web/wcf/函数

    //xml序列化 public static string Seria(DataSet ds) { XmlSerializer serializer = new XmlSerializer(typeo ...

  4. MYSQL数据导入导出

    在不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况发生.所以一般推荐用SQL脚本形式导入.下面分别介绍两种方法. 进入cmd 导出所有数据库:输入:mysqldump -u ...

  5. Javascript之严格模式详解

    一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).顾名思义,这种模式使得Javascript在更严格的条件下运行. ...

  6. 一款安卓ShowcaseView视图源码效果

    该源码是从源码天堂那边转载过来的,大家可以看看一下吧啊,一款安卓ShowcaseView视图源码效果,非常不错的,特别是在做引导时使用. 源码下载地址:http://code.662p.com/vie ...

  7. 结合Git实现Mysql差异备份,可用于生产环境

    埋头苦干多年一直没写过文章,今天突发狂想,为LNMP阵营贡献一些力量.就从平时工作过程中的心得和一些技巧分享出来.今天就猿们最熟悉的Mysql开始宅鸟的开篇博客文章.欢迎猿们拍砖.转载. 注意:宅鸟的 ...

  8. Web前端年后跳槽必看的各种面试题

    幸运且光荣的被老大安排了一个任务 - “去整理些前端面试题”.年前确实不是招人的好时候,所以我们前端团队经过了超负荷的运转,终于坚持过了春节.春节以后就开始招人啦,这套题考察的目标就是基础基础再基础, ...

  9. 软件工程 speedsnail 冲刺5

    2015-5-9 完成任务:学习了黑马android教学视频10\11\12集,填写游戏人的姓名功能为明天的记分板准备: 遇到问题: 问题1 Suspicious method call; shoul ...

  10. IOS基础——alloc、init和new方法

    alloc:分配内存. init:初始化. new:代替上面两个函数:分配内存,并且初始化. 注意: 1.在实际开发中很少会用到new,一般创建对象时我们一般是 [[className alloc]i ...