- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
熟悉binutils工具集(完整版)
熟悉binutils 工具集
熟悉binutils 工具集
李 云
Blog:
摘要
对于嵌入式系统开发,掌握相应的工具至关重要,它能使我们解决问题的效率大大提高。目前,
可以说嵌入式系统的开发工具是GNU 的天下,因为来自GNU 的GCC 编译器支持大量的目标处理
器。除了GCC,还有一个非常重要的、同样来自于GNU 的工具集(toolchain )—— binutils toolchain。
这一工具集中存在的一些工具,可以说是我们开发和调试不可缺少的利器。
本文通过介绍binutils 以及提供一定的使用实例来帮助读者熟悉这一工具集,以达到提高效率的
目的。当你掌握了binutils 后,你会发现你得到的是 “渔”而不只是“鱼”。
关键词
binutils 工具集
参考资料
《什么是boot loader》
《堆和栈》
《程序中的段》
《C 语言中一个字节对齐问题的分析》
1 引言
对于嵌入式系统开发,掌握相应的工具至关重要,它能使我们解决问题的效率大大提高。目前,
可以说嵌入式系统开发工具是 GNU ()的天下,因为来自GNU 的GCC 编译器支持
大量的目标处理器。除了GCC,还有一个非常重要的、同样来自于GNU 的工具集 (toolchain )—
— binutils toolchain 。Binutils 中的工具不少和GCC 相类似,也是针对特定的处理器的。
你可能要问:哪些嵌入式操作系统的开发是采用GNU 工具集 (包括GCC 编译器、binutils 工
具集等)的?Linux 相关的实时(Monta Vista Linux、WindRiver Linux 、RTLinux 等)或非实时嵌
入式系统开发就不用说了,全是采用GNU 工具集的;最为有名的来自WindRiver (现已被Intel 收
购)的VxWorks 操作系统也是采用 GNU 工具集的,为了使用GNU 工具集,VxWork 的开发IDE
采用Cygwin 作为其在Windows 操作系统的支撑平台;还有就是RTEMS ( )操作系
统,以前是美国军方的一个实时操作系统,后来开源了,也是采用 GNU 工具集的;此外,另一个
很有名的实时操作系统 —— eCos,也是采用GNU 工具集的,如果你熟悉Altera 的Nios,那么对
eCos 也应当不陌生;等等。我想可以举出很多很多的例子。例子越多,说明我们学习binutils 就越
是有用!还有对于 bintuils 工具集的学习,不光是对于嵌入式系统开发有用,对于 Linux 主机或是
Solaris 服务器上的程序开发也是很有帮助的。
对于采用C/C++从事Windows 应用程序开发的人来说,很有可能会问:我在Windows 上的一
个目标文件其后缀是.obj,在GNU 的工具集中仍是采用.obj 后缀吗?在Windows 中的动态库是以.dll
结尾的,那在 GNU 的工具集中也一样吗?。这些都是很好的问题,通过类比,我们可以根据我们
的经验去掌握另一类似的新东西。在 GNU 工具集中,一个源程序(.c 或是.cpp)是先被编译成.o
目标文件(对应于Windows 中的.obj 文件)的,如果目标文件直接连接成可执行文件,则生成的是
ELF (Excutable and Linkable Format)文件。这种可执行文件对应于Windows 中的.exe 文件,与
Windows 系统所不同的是,在GNU 工具集中一个可执行文件并没有一个统一的后缀,甚至没有后
█ 1
熟悉binutils 工具集
缀。如果要将多个.o 文件生成一个库文件,那么存在两种类型的库:一种是静态库,其后缀是.a;
另一种是动态库,其后缀是.so。在Windows 系统中,其全部都是.dll。静态库与动态库的区别是什
么呢?静态库是每一个与这一库进行连接的都将有一份代码(和数据)拷贝。比如,如果 libx.a 中
存在一个foo () 函数,而程序A 和程序B
文档评论(0)