交叉工具链

对于一个简单的hello.c程序

#include<stdio.h>

void main()

{

printf("hello world ->\n");

}

我们在Linux编译时使用gcc

gcc hello.c -o hello  (-o重命名);但是编译后拷贝到arm里面无法使用,我们需要专门的编译器来编译,我们将写好的程序hello.c在 Linux里面不在使用gcc编译了,使用arm-gcc来编译了

 arm-linux-gcc hello.c -o hello 

然后拷贝到arm里面运行

./hello  就行了,输出 hello world->

 

在嵌入式开发中宿主机是编译,链接嵌入式软件的计算机,目标机是执行嵌入式软件的硬件平台


常用交叉工具

arm-linux-gcc(交叉编译器)

arm-linux-ld  (交叉链接器)

arm-linux-readelf 

arm-linux-objdump (反汇编器)

arm-linux-objcopy(文件格式转换器)

简单的使用方法:

linux里面的gcc编译在/usr/include/dtdio.h中下查找头文件

而arm-linux-gcc编译我们可以通过help查看

arm-linux-gcc(交叉编译器)得到的文件格式是elf的

arm-linux-gcc 使用方法和gcc一样

arm-linux-gcc -g(显示出调试信息)-o(重新命名)

arm-linux-ld  (交叉链接器)

arm-linux-ld -Tled.ldf(链接器脚本) -o led.elf(链接之后的名字指定的最好加上.elf链接后的文件格式是elf) led.o(链接的.o文件)

arm-linux-readelf (交叉转换器)

arm-linux-readelf -a(也就是all)led.elf(查看程序使用的大小端,平台等信息)

arm-linux-objdump -D -S hello(编译出汇编代码)在和arm-linux-gcc一起使用时arm-linux-gcc最好加上-个参数有利于得到的汇编中能和c语言对应起来,看的明白,(在看main函数的时候)

arm-linux-objcopy(文件格式转换器)将elf装换成二进制文件

arm-linux-objcopy -O(输出格式)binary led.elf(源文件) led.bin(二进制文件)

编译时出错的简单解决办法

查看使用工具(gcc,arm-linux-gcc等等)编译后的应用程序能够使用的平台我们可以使用命令file+编译后的程序 

例如  file hello

查看大小端使用命令 例如arm-linux-readelf -a(也就是all)led.elf

查看应用程序必须使用的库文件arm-linux-readelf -d hello