整个编译过程由三个阶段组成:预处理、转换为目标代码和链接。缺省情况下,编译器调用命令调用编译过程的所有阶段以将程序从源代码转换为可执行的输出。如果在调用编译器时指定了输入和输出文件的文件名,则它根据输入和输出文件的文件名后缀(扩展名)确定起始阶段和结束阶段。
也可以在任何编译阶段通过使用适当的编译器选项来创建特定类型的输出文件。例如,用 -E 或 -P 选项调用 xlc 或 xlC 命令仅对输入文件执行预处理阶段。编译器调用根据输入文件名的扩展名确定是调用 IBM 编译器、汇编程序还是链接程序。汇编程序和链接程序是随 Linux 操作系统一起提供的工具。
相关参考
XL C/C++ 提供了一些基本编译器调用命令以供选择,这些命令支持 C 和 C++
语言的各种版本级别。每个调用命令自动为语言级别、其它相关语言功能的选项以及任何相关的预定义宏设置编译器子选项。在大多数情况下,应使用
xlc 命令来编译 C 源文件,使用 xlC 命令来编译 C++
源文件(或同时有 C 和 C++
源文件时)。提供了基本命令的变体以支持线程应用程序的需求并且变体是通过将后缀
_r 附加至基本命令形成的。
受支持的调用命令 | ||
xlc xlc++ xlCcc c89 c99 |
xlc_r xlc++_r xlC_r cc_r c89_r c99_r | _r 调用用于编译线程安全的应用程序,也称为可重入的编译器调用。 |
另外,gxlc 和 gxlc++ 实用程序是专门的编译器调用形式。
相关参考
对于 Linux 平台,仅存在一个对象模型。如果要移植依赖于 AIX 上受支持的对象模型(ibm 或 classic)的应用程序,可能需要修改代码。用于指定特定对象模型的编译器选项和编译指示不可用于 Linux。
编译器使用文件扩展名来确定适当的编译阶段并调用关联的工具。
编译器接受以下类型的文件作为输入:
接受的输入文件类型 | ||
文件类型描述 | 文件扩展名 | 示例 |
---|---|---|
C 和 C++ 源文件 | .c(小写 c)表示 C 语言源文件;
.C(大写 c)、.cc、.cp、.cpp、.cxx 和 .c++ 表示 C++ 源文件。 | file_name.c
file_name.C、file_name.cc、 file_name.cpp、file_name.cxx 和 file_name.c++ |
已预处理的源文件 | .i | file_name.i |
目标文件 | .o | hello.o |
汇编程序文件 | .s | check.s |
归档文件 | .a | v1r5.a |
可装入的模块或共享库文件 | .so | my_shrlib.so |
IPA 控制文件(-qipa=file_name) | 未强制使用 file_name 的命名约定。 | ipa.ctl |
当调用编译器时可以指定以下类型的输出文件:
输出文件的类型 | |
文件类型描述 | 示例 |
---|---|
可执行文件 | 缺省情况下为 a.out |
目标文件 | file_name.o |
可装入的模块或共享目标文件 | file_name.so |
汇编程序文件 | file_name.s |
已预处理的文件 | file_name.i |
清单文件 | file_name.lst |
目标文件 | file_name.d |
相关参考
如果调用编译器而没有指定任何选项,则编译器的行为由下列缺省设置控制: