标题:
一套完整的ARM交叉编译环境的搭建过程(3)
[打印本页]
作者:
yuyang911220
时间:
2014-8-28 17:09
标题:
一套完整的ARM交叉编译环境的搭建过程(3)
四、安装二进制工具(binutils)
Binutils是一些二进制工具集合,其中包含了常用的一些命令。首先将binutils-2.22.tar.bz2解压至build-tools,然后进入build-binutils目录,配置并编译binutils,最后使用make install进行安装。实例:
root@fedora:/opt/embedded/build-tools# cd /opt/embedded/build-tools/
root@fedora:/opt/embedded/build-tools# cp /mnt/hgfs/Document/binutils-2.22.tar.bz2 .
root@fedora:/opt/embedded/build-tools# tar -xjf binutils-2.22.tar.bz2
root@fedora:/opt/embedded/build-tools# cd build-binutils/
root@fedora:/opt/embedded/build-tools/build-binutils#../binutils-2.22/configure --target=$TARGET --prefix=$PREFIX
root@fedora:/opt/embedded/build-tools/build-binutils# make
root@fedora:/opt/embedded/build-tools/build-binutils# make install
完成后,去$PREFIX中检查一下生成的工具。实例:
root@fedora:/opt/embedded/build-tools/build-binutils# cd /opt/embedded/tools/bin
root@fedora:/opt/embedded/tools/bin# ll
有如下文件:
arm-linux-addr2line*
arm-linux-ar*
arm-linux-as*
arm-linux-c++filt*
arm-linux-elfedit*
arm-linux-gprof*
arm-linux-ld*
arm-linux-ld.bfd*
arm-linux-nm*
arm-linux-objcopy*
arm-linux-objdump*
arm-linux-ranlib*
arm-linux-readelf*
arm-linux-size*
arm-linux-strings*
arm-linux-strip*
这些生成的文件的作用分别为:
arm-linux-addr2line:将你要找的地址转成文件和行号,它要使用 debug 信息
arm-linux-ar:产生、修改和解开一个存档文件
arm-linux-as:GNU的汇编器
arm-linux-c++filt:C++ 和 java 中有一种重载函数,所用的重载函数最后会被编译转化成汇编的标,c++filt 就是实现这种反向的转化,根据标号得到函数名
arm-linux-elfedit:用途暂时未知
arm-linux-gprof:GNU汇编器预编译器
arm-linux-ld:GNU的连接器
arm-linux-ld.bfd:用途暂时未知
arm-linux-nm:列出目标文件的符号和对应的地址
arm-linux-objcopy:将某种格式的目标文件转化成另外格式的目标文件
arm-linux-objdump:显示目标文件的信息
arm-linux-ranlib:为一个存档文件产生一个索引,并将这个索引存入存档文件中
arm-linux-readelf:显示 elf 格式的目标文件的信息
arm-linux-size:显示目标文件各个节的大小和目标文件的大小
arm-linux-strings:打印出目标文件中可以打印的字符串,有个默认的长度,为4
arm-linux-strip:剥掉目标文件的所有的符号信息
注:编译过程中有可能出现的错误:
gcc -DHAVE_CONFIG_H -I. -I. -I. -I../bfd -I./config -I./../include -I./.. -I./../bfd -DLOCALEDIR="\"/tools/cross/share/locale\"" -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror -g -O2 -MT tc-arm.o -MD -MP -MF .deps/tc-arm.Tpo -c -o tc-arm.o `test -f 'config/tc-arm.c' || echo './'`config/tc-arm.c
cc1: warnings being treated as errors
config/tc-arm.c: In function ‘make_mapping_symbol’:
config/tc-arm.c:2489: 警告:if 语句体为空
make[4]: *** [tc-arm.o] 错误 1 // 排错要充分利用报错信息。
make[4]: Leaving directory `/root/build/binutils-2.20_cross/gas'
make[3]: *** [all-recursive] 错误 1
make[3]: Leaving directory `/root/build/binutils-2.20_cross/gas'
make[2]: *** [all] 错误 2
make[2]: Leaving directory `/root/build/binutils-2.20_cross/gas'
make[1]: *** [all-gas] 错误 2
make[1]: Leaving directory `/root/build/binutils-2.20_cross'
make: *** [all] 错误 2
解决方案:
1)网上说的在tc-arm.c中加个括号,没研究,可能好用;
2)在make这一步中,可能会在编译../binutils-2.22/gas/config/tc-arm.c出现gcc把警告当成错误的错误,其原因在于编译该文件时使用了-Werror选项,解决办法是修改../binutils-2.22/gas/configure文件第10624行,把ERROR_ON_WARNING=yes改为ERROR_ON_WARNING=no,保存退出,重新执行make即可。
3)在配置时,关闭Warning报错,也可以编译成功:(我用的是这种)
[root@localhost binutils-2.20_cross_no_2]# ./configure --target=arm-linux --disable-werror && make
参考:
http://hi.baidu.com/thinke365/bl ... 1f095af819b853.html
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0