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

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
    1

  2. arm-elf-gcc -c max.s
    由汇编文件编译得到Object文件max.o
    2

  3. arm-elf-readelf -a max.o > max_elfinfo
    这个命令将给出全部的Object文件信息,保存在max_elfinfo这个文件中
    3

  4. 查看一下max_elfinfo文件:ELF_header
    4

  5. 查看一下max_elfinfo文件:Section_header
    5
    5_2

  6. hexdump -C max.o > max_hex
    直接打印出Object文件的全部字节,保存在max_hex文件中
    6
    以上面的.real.text为例子
    6_2

  7. Elf最后输出的内容
    7
    .rel.text告诉链接器指令中的哪些地方需要做重定位;
    .symtab是符号表。Ndx列是每个符号所在的Section编号
  8. arm-elf-ld.real -o max2.out max.o
    链接指定Object文件,max2.out为生成的文件,max.o为源文件
    8
    由于没有__gccmain函数入口,故有warning,此处先不管,绿色即为新生成文件
  9. 用readelf命令分析新生成的max2.out
    arm-elf-readelf -a max2.out > max2_elfinfo
    9
    9_2
    9_3

  10. 调用不同c文件中的子函数
    程序修改后如下:
    10
    10_2
    10_3

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

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

  13. arm-elf-objdump -S main2.out > main2_1.s
    反汇编链接后的.out文件,和链接前的.o文件反汇编结果进行比较
    13
    新生成的main2_1.s文件里面比原来的多了很多内容,最大的不同在于区分了各个文件的代码段
    13_2
    13_3
    13_4

转载于:https://www.cnblogs.com/wsine/p/4664503.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值