在本文中,您将学习有关 Linux™ on POWER™ 中 GNU 工具链的知识。本文将重点介绍可用于使用 Linux on POWER 上的 GNU 编译器(compiler)、链接器(linker)和加载器(loader)的一些常用选项,还将讨论 GNU binutils,重点考虑特定于 Linux on POWER 的一些考虑事项,以及 SUSE Linux Enterprise Server Version 9 和 Red Hat Enterprise Linux Version 4 中提供的一些新特性。
简介
GNU 软件的一个显著优点是它来自严格的开发者社区,具有很好的可移植性。GNU 开发工具链(toolchain)是指 GNU Compiler Collection、GNU libc 以及用来编译、测试和分析软件的 GNU binutils。这些工具遵守 PowerOpen ABI 和 64 位的 PowerPC® ELF ABI Supplement 规范,从而确保与其他类似工具的二进制兼容性。此外,它们是 Linux on POWER 的默认开发工具链。
尽管 GNU 工具重点强调的是兼容性,但是与其他通用开发平台相比,它们在 POWER 架构上仍然有一些特有的区别。POWER 上的指令集与其他架构有所不同,GNU toolchain 负责处理这些区别。开发人员应该理解使用 GNU toolchain for Linux on POWER 的细节。例如,在 Linux on POWER ABI 和其他通用的 ABI 之间有所差异,开发人员必须知道在开发和移植软件时,这些差异会对自己的代码产生什么影响。
值得一提的是 IBM XL C/C++ 和 Fortran 编译器也会使用 GNU toolchain 来生成二进制文件。在这些相关的地方,我们将针对 XL C/C++ 对 GNU toolchain 进行讨。通过逐步解决基本操作、特定于 POWER 的操作、潜在的缺陷和 GNU toolchain 一些新开发的特性,本文解决了 GNU toolchain for Linux on POWER 的软件开发和可移植性需求问题。本文还对 GCC C/C++ 编译器、GNU 链接器和汇编程序以及其他一些 GNU binutils 进行了探索。虽然还有很多平台都没有介绍,但 GNU 手册通常都会引用一些完整介绍这些主题的资料。本文并没有讨论 Linux on POWER 系统中其他 GCC 编译器、IBM XL C/C++、Fortran 或 Java 开发的一些细节问题。
我们从 GCC 编译器和编译驱动器入手开始介绍,依次介绍 GNU 链接器、GNU 汇编程序和其他的 binutils。本文没有明确地对 GNU C Library 进行讨论,因为特定于 POWER 的变体很少,应该不会影响到用户,C Library 通常也被认为是 GNU Toolchain 的一部分。在合适的地方,我们给出了在 Linux on POWER 上发现的一些细微区别,为那些熟悉其他平台上的 Linux 或者在 POWER 架构上运行的 AIX 的开发人员提供帮助。(例如,x86 和 POWER 之间就有一些区别:前者的汇编程序不同,后者在 ELF 和 XCOFF ABI 之间也有所不同。)
GNU Compiler Collection
从历史传统上来说,GCC 是代表 GNU C Compiler,但是现在它代表 GNU Compiler Collection。GCC 是用于 C、C++、Objective-C、Java™、Fortran 和 Ada 编程语言的一个编译器集。不过本文的讨论仅仅局限于 C 和 C++ 编译器,尤其是那些 GCC 的操作和选项、特定于 POWER 架构的 GCC 特性操作和受 GCC 支持的最新特性,这些特性是随 Linux for POWER 架构的两个领先发行版本(Red Hat Enterprise Server AS 和 SUSE LINUX Enterprise Server)一起打包的。
GCC 的基本操作
GCC 的基本操作驱动着预处理、编译、汇编和链接的过程。传递给 GCC 的大部分选项实际上都会被重定向给工具链中的其他组件。有些选项,例如平台的选择、调试和优化标记,会为编译器和其他组件同时提供参数。
输入选项
编译器必须知道要处理的是哪种类型的输入数据。例如,C 源程序文件的处理就与 C++ 文件不同。对于编译器来说,有一个基本的隐式选项:源程序文件的扩展名。该选项将决定调用哪一个 GCC 编译器。例如,file.c 调用的是 C 编译器,而 foo.C 或 foo.cxx 则会调用 C++ 编译器。在 GCC 手册中列出了可接收源代码文件的扩展名的完整列表。
| 论坛热门帖子: | [lch203] 写得蛮好的linux学习笔记(10-21) [黑马制造] 学习java的30个目标(10-19) [笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19) [udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18) [沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18) |
| TAG标签: | 工具 使用 可以 选项 GNU 编译 一个 程序 GCC 链接 进行 |
注册
个人空间
