交叉编译工具链(详解)

1、嵌入式开发模型-交叉开发

在嵌入式开发过程中有宿主机目标机的角色之分:宿主机是执行编译链接嵌入式软件的计算机;目标机是运行嵌入式软件的硬件平台。

在宿主机执行编译的流程如下:

2、交叉编译工具链详解

参考:

http://www.crifan.com/files/doc/docbook/cross_compile/release/html/cross_compile.html

3、制作交叉编译工具

参考:

http://www.crifan.com/files/doc/docbook/crosstool_ng/release/html/crosstool_ng.html

4、交叉编译工具

arm-linux-gcc

arm-linux-addr2line

arm-linux-objcopy

arm-linux-readelf

arm-linux-ar

arm-linux-ld

arm-linux-objdump

arm-linux-size

arm-linux-nm

arm-linux-strip

arm-linux-cc

arm-linux-gprof

arm-linux-c++filt

arm-linux-as

arm-linux-cpp

arm-linux-gccbug

arm-linux-ldd

arm-linux-populate

arm-linux-strings

arm-linux-c++

arm-linux-g++

arm-linux-gcov

arm-linux-ranlib

如何查看各交叉编译工具的帮助信息:

例如查看arm-linux-gcc的帮助信息:

$ arm-linux-gcc --help

常用的交叉编译工具:

4.1 交叉编译器 arm-linux-gcc

    和X86平台下的gcc的基本用法用法是完全一样的;不同之处:标准的gcc所引用的头文件路径为 /usr/include/stdio.h,arm-linux-gcc所引用的头文件路径为其安装路径下,如 /usr/local/armtools/4.5.1/bin/..

4.2 交叉链接器 arm-linux-ld

arm-linux-ld命令是ARM平台下的交叉链接器,把程序链接成可以在ARM平台下运行。

    用法: arm-linux-ld -Tled.lds led.o -o led.elf

把led.o链接成led.elf文件;led.lds是链接器脚本,

4.3 交叉elf文件工具 arm-linux-readelf

查看.elf格式文件: arm-linux-readelf -a led.elf

-a 参数是查看.elf文件的所有内容

注意:编译的程序运行不了有两个原因:一个是要看运行平台对不对,第二个是要看处理器的大小端跟编译的程序的大小端是否对应,可以使用arm-linux-readelf -a xxx.elf 命令查看编译出来的程序大小端情况和程序运行平台。

如下图所示,编译后的程序只能运行在小端(little endian)的处理器上,其运行平台Machine是ARM。绝大多数ARM处理器都是小端的。

查看程序运行平台还可以使用file xxx (xxx为编译后可执行文件) 命令查看。

如一个应用程序不能执行,排除了运行平台和大小端的情况后,还有可能是库不对。

使用arm-linux-readelf -d xxx (xxx为编译后可执行文件)查看运行库;如hello程序运行库为libc.so.6,如果开发板上没有这个库,程序是运行不了的。

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

把hello.c文件编译成hello可执行文件:arm-linux-gcc hello.c -o hello

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

把hello可执行文件反汇编后输入保存到dump文件中。

-D -S 是反汇编参数,>dump 把hello反汇编后的内容保存到dump文件中

注意: 在编译hello时没有使用-g参数,反汇编后的代码和原来C代码对应不起来。我们可以在编译hello时使用-g参数:

先把hello.c文件编译成hello可执行文件:arm-linux-gcc -g hello.c -o hello;运行arm-linux -objdump -D -S hello >dump命令,打开dump文件可以看到

4.5文件格式转换器 arm-linux-objcopy

使用arm-linux-objcopy命令可以把ELF格式的文件转换成二进制文件。

文件格式转换的原因:elf格式的文件不能直接在ARM上运行(ARM只能运行二进制格式的文件);

用法:arm-linux-objcopy -O binary led.elf led.bin

把led.elf格式的文件转换成led.bin二进制文件。

4.6库管理器arm-linux-ar

arm-elf-ar将多个可重定位的目标模块归档为一个函数库文件。采用函数库文件,应用程序能够从该文件中自动装载要参考的函数模块,同时将应用程序中频繁调用的函数放入函数库文件中,易于应用程序的开发管理。arm-elf-ar支持ELF格式的函数库文件.

转自:https://www.cnblogs.com/AP0904225/p/5904950.html

原文地址:https://www.cnblogs.com/coolYuan/p/9037660.html

时间: 2024-10-09 03:26:08

交叉编译工具链(详解)的相关文章

ARM工具链详解

工具链:工具链就是一堆工具集合,它这里就会说到是编译器.链接器.装配器甚至包括调试等等这样一堆的工具集合就称为工具链.在这里默认自带ARM公司的工具链,所以我们可以直接使用,包括还可以支持一些静态链接库或者动态链接库等等. 然后就可以自己写代码进行编译,而编译出来的东西就直接是针对ARM的,那么这个并文件就可以直接给它烧到这样的一个开发板上. 同时在关盘目录下面有个Linux,在Linux下面就有一些与Linux相关的很多工具,包括"mktools"工具,文件系统制作工具,图上第一款就

交叉编译工具链

1.嵌入式开发模型-交叉开发 在嵌入式开发过程中有宿主机和目标机的角色之分:宿主机是执行编译.链接嵌入式软件的计算机:目标机是运行嵌入式软件的硬件平台. 在宿主机执行编译的流程如下: 2.交叉编译工具链详解 参考: http://www.crifan.com/files/doc/docbook/cross_compile/release/html/cross_compile.html 3.制作交叉编译工具 参考: http://www.crifan.com/files/doc/docbook/c

archlinux安装交叉编译工具链

1. 在/usr/local下新建文件夹:arm  [[email protected] local]$sudo mkdir arm 2. 将交叉编译工具拷贝到arm文件夹中  [[email protected] arm]$sudo mv ~/Downloads/arm-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 . [[email protected] arm]$ ls  arm-2011.03-41-arm-non

Linux下获取arm的交叉编译工具链

转载请注明文章:Linux下获取arm的交叉编译工具链 出处:多客博图 这里介绍,Linux下获取arm的交叉编译工具链,比如arm-linux-gnueabihf-gcc.arm-linux-gneabihf-gcc等. 前言 这里有一个专门的说法: “arm-linux-gnueabihf-gcc是由 Linaro 公司基于GCC推出的的ARM交叉编译工具.可用于交叉编译ARM系统中所有环节的代码,包括裸机程序.u-boot.Linux kernel.filesystem和App应用程序.使

ubuntu下编译交叉编译工具链

交叉编译工具链在arm开发中出很重要的位置,开发之前肯定要先有编译器 连接器 汇编器等基础的编译工具.arm体系是一个很复杂的体系,里面的指令有数个版本不同的体系level还有很多自己的特点 ,这就要求编译器也要出几个版本的针对不同的应用. 当然网络上存在很多的编译器的资源,但是作为一个嵌入式开发人员还是要会自己构建出来一个工具链的,做到只能说不想做,不能说做不到,不然真的遇到特殊应用的需要无法作出编译器项目就直接挂了. 整个工具链的编译过程如果采用纯手工的step by step  真的需要几

嵌入式开发环境搭建之安装交叉编译工具链

如果开发环境是Linux,那么交叉编译工具链是必须的,具体安装过程如下:(以我现在用的为例)准备好制作好的交叉编译工具链arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 cd work/toolchaintar xjf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 解压好后需要设置环境变量为了方面,不要每次使用时都要手动设置,可以在/etc/environment中修改PATH的值,如下: PATH="/usr/local/sbin

交叉编译工具链介绍《Building Embedded Linux Systems》

1.前言 配置和编译一个合适的GNU工具链是相对复杂的并且需要很精细的操作,包括你需要对不同软件库之间的依赖关系.它们的各自的任务,不同软件库版本情况都有比较好的了解,编译工具链是一个乏味的工作. 2.制作之前需要了解的一些术语与名称 1)build:你编译你的工具链时所使用的编译系统. 2)host:交叉编译工具链运行在的主机系统. 3)target:你的交叉编译工具链所生成的可执行文件所要运行的目标系统. 在一些通用非嵌入式的使用,以上三个必须是一样的.但是大部分嵌入式开发中,build跟h

交叉编译工具链bash: gcc:no such file or directory

在进行交叉编译工具链安装时,有三种方法: 1.源码编译,手动安装 2.二进制可执行文件直接安装 3.直接解压工具链,手动修改环境变量 为了方便,我们多用方法3进行安装.但是问题来了,你的工具链制作时有可能是针对32位OS的,但是你的虚拟机有可能是64位的. 这就导致一个问题: 修改了环境变量后,source以下,用tab按键能补齐命令,但是执行"cross-compiler-gcc -v"命令时,出现以下错误提示: bash:/opt/...../cross-compiler-gcc:

自动化运维工具——ansible详解案例分享

自动化运维工具--ansible详解案例分享(一)目录ansible 简介ansible 是什么?ansible 特点ansible 架构图ansible 任务执行ansible 任务执行模式ansible 执行流程ansible 命令执行过程ansible 配置详解ansible 安装方式使用 pip(python的包管理模块)安装使用 yum 安装ansible 程序结构ansible配置文件查找顺序ansible配置文件ansuble主机清单ansible 常用命令ansible 命令集a