交叉工具链
对于一个简单的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