如何为嵌入式开发建立交叉编译环境(3)

建立二进制工具(binutils)

binutils是一些二进制工具的集合,其中包含了我们常用到的as和ld。

首先,我们解压我们下载的binutils源文件。


$cd $PRJROOT/build-tools $tar -xvjf binutils-2.10.1.tar.bz2  

然后进入build-binutils目录配置和编译binutils。


$cd build-binutils $../binutils-2.10.1/configure --target=$TARGET --prefix=$PREFIX  

--target 选项是指出我们生成的是 arm-linux 的工具,--prefix 是指出我们可执行文件安装的位置。

会出现很多 check,最后产生 Makefile 文件。

有了 Makefile 后,我们来编译并安装 binutils,命令很简单。


$make $make install  

看一下我们 $PREFIX/bin 下的生成的文件


$ls $PREFIX/bin arm-linux-addr2line arm-linux-gasp arm-linux-objdump arm-linux-strings arm-linux-ar arm-linux-ld arm-linux-ranlib arm-linux-strip arm-linux-as arm-linux-nm arm-linux-readelf arm-linux-c++filt arm-linux-objcopy arm-linux-size  

我们来解释一下上面生成的可执行文件都是用来干什么的

add2line - 将你要找的地址转成文件和行号,它要使用 debug 信息。

Ar-产生、修改和解开一个存档文件

As-gnu 的汇编器

C++filt-C++ 和 java 中有一种重载函数,所用的重载函数最后会被编译转化成汇编的标号,c++filt 就是实现这种反向的转化,根据标号得到函数名。

Gasp-gnu 汇编器预编译器。

Ld-gnu 的连接器

Nm-列出目标文件的符号和对应的地址

Objcopy-将某种格式的目标文件转化成另外格式的目标文件

Objdump-显示目标文件的信息

Ranlib-为一个存档文件产生一个索引,并将这个索引存入存档文件中

Readelf-显示 elf 格式的目标文件的信息

Size-显示目标文件各个节的大小和目标文件的大小

Strings-打印出目标文件中可以打印的字符串,有个默认的长度,为4

Strip-剥掉目标文件的所有的符号信息

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwwszs.html