您的位置:首页 > 其它

交叉工具链

2015-08-23 21:15 225 查看
对于源文件hello.c

使用gcc编译:gcc -static hello.c -o hello,得到的hello可在虚拟机中正常运行,但将这个hello复制到开发板的linux系统中,hello无法正确运行;

使用arm-linux-gcc编译:arm-linux-gcc -static hello.c -o hello,得到的hello可在开发板的linux系统中正常运行。

交叉开发:所谓交叉开发是指先在一台通用PC上进行软件的编辑、编译与连接,然后下载到嵌入式设备中运行调试的开发过程。通用PC成为宿主机,嵌入式设备成为目标机。

常用的交叉工具:

交叉编译器:arm-linux-gcc

交叉链接器:arm-linux-ld

交叉转换器:arm-linux-objcopy

交叉ELF文件工具:arm-linux-readelf

交叉反汇编器:arm-linux-objdump

交叉编译器arm-linux-gcc寻找头文件路径与gcc寻找头文件路径不同。

gcc寻找头文件路径为:/usr/include/

交叉链接器:可以将多个只进行了编译但没有进行链接的文件链接成一个可执行文件。

arm-linux-ld -Tled.lds -o led.elf led.o main.o //将led.o和main.o链接成led.elf

交叉ELF文件工具

arm-linux-readelf -a led.elf //查看led.elf的所有信息

arm-linux-readelf -d hello

交叉反汇编器:将可执行文件变回汇编文件

arm-linux-objdump -D -S hello >dump

然后可通过查看文件dump 查看汇编代码

交叉转换器:能够将elf文件转换为二进制文件

能够在arm处理器中运行的一定是二进制文件,所以需要将可执行文件转换为二进制文件

arm-linux-objcopy -O binary led.elf led.bin

无论是arm-linux-gcc,还是arm-linux-ld产生的输出文件都是elf格式文件,都不是二进制文件。之前所说的使用arm-linux-gcc编译得到的hello文件可在开发板上运行是指hello可在开发板的linux系统中运行,此时linux系统会自动将elf文件转换为二进制文件再执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: