熟悉binutils工具集(完整版).pdf

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

karin + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档