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. PAT1038. Recover the Smallest Number

    //意识到一个重要错误,一直以为atoi,itoa是windows独有的,linux下不可用,直到刚刚... //string+=比strcat好用多了,字符比较也方便的多,但是用scanf读入str ...

  2. 开源项目:libbpg

    1 ubuntu下编译libbpg(编译机器64bit) 安装cmake,libpng,yasm,gcc,g++ cmake版本最低为2.8.8,安装完毕后使用cmake --version查看是否安 ...

  3. javascript之for-in循环(for-in Loops)

    for-in循环应该用在非数组对象的遍历上,使用for-in进行循环也被称为“枚举”. 从技术上将,你可以使用for-in循环数组(因为JavaScript中数组也是对象),但这是不推荐的.因为如果数 ...

  4. 十七、OGNL表达式

    十七.OGNL OGNL简介: OGNL是对象导航图语言.它是一个独立的项目.早期的webwork框架用到了OGNL作为自己的表达式语言, 所以struts2也是用OGNL作为表达式语言,当然也可以使 ...

  5. MySQL的存储引擎整理

    01.MyISAM MySQL 5.0 以前的默认存储引擎.MyISAM 不支持事务.也不支持外键,其优势是访问的速度快,对事务完整性没有要求或者以SELECT.INSERT 为主的应用基本上都可以使 ...

  6. Js/Ajax中发送HttpPost请求调用WebService

    1) WebService中的方法 [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(Confo ...

  7. 分享一个jquery写的类似于百度的搜索框,(可动态配置,可单列或者table格式,可填充数据)

    需求:类似于百度的搜索框,可配置,可单列可table格式,可填充数据.页面可多次使用,简单,易用. 想法:使用jquery,css,ajax,前台调用,后台返回json数据. jquery代码: va ...

  8. Linux下Mysql主从复制(Master-Slave)与读写分离(Amoeba)实践

    一.为什么要做Mysql的主从复制(读写分离)?通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低.为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻 ...

  9. C# 运行时编辑 节点重命名

    方法一: ; bool nodeChanged = false; //右键点击,就进入修改状态 private void treeView1_NodeMouseClick(object sender, ...

  10. Cannot change version of project facet Dynamic web的解决方法

    用Eclipse创建Maven结构的web项目的时候选择了Artifact Id为maven-artchetype-webapp,由于这个catalog比较老,用的servlet还是2.3的,而一般现 ...