【编译、链接、装载一】预处理、编译、汇编、链接( 四 )


文章插图
手册页部分_用户命令_用户命令cpp
/usr/lib/cpp [-BCHMpPRT] [-undef] [-Dname] [-Dname = def] [-Idirectory] [-Uname] [-Ydirectory] [input-file [output-file]]
3、gcc、g++
gcc和g++是什么 , 有什么区别?
发展至今(2020 年 6 月份) , GCC 编译器已经更新至 10.1.0 版本 , 其功能也由最初仅能编译 C 语言 , 扩增至可以编译多种编程语言 , 其中就包括 C++。
除此之外 , 当下的 GCC 编译器还支持编译 Go、-C , -C ++ ,  , Ada , D 和 BRIG(HSAIL)等程序 , 甚至于 GCC 6 以及之前的版本还支持编译 Java 程序 。但本教程主要讲解如何使用 GCC 编译器编译运行 C 和 C++ 程序 , 因此有关其它编程语言如何使用 GCC 编译器编译 , 将不再做具体讲解 。
那么 , 在已编辑好 C 语言或者 C++ 代码的前提下 , 如何才能调用 GCC 编译器为我们编译程序呢?很简单 , GCC 编译器已经为我们提供了调用它的接口 , 对于 C 语言或者 C++ 程序 , 可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器 。
值得一提的是 , 实际使用中我们更习惯使用 gcc 指令编译 C 语言程序 , 用 g++ 指令编译 C++ 代码 。需要强调的一点是 , 这并不是 gcc 和 g++ 的区别 , gcc 指令也可以用来编译 C++ 程序 , 同样 g++ 指令也可以用于编译 C 语言程序 。
那么 , gcc 和 g++ 的区别是什么呢?接下来就给读者做详细的讲解 。
实际上 , 只要是 GCC 支持编译的程序代码 , 都可以使用 gcc 命令完成编译 。可以这样理解 , gcc 是 GCC 编译器的通用编译指令 , 因为根据程序文件的后缀名 , gcc 指令可以自行判断出当前程序所用编程语言的类别 , 比如:
当然 , gcc 指令也为用户提供了“手动指定代表编译方式”的接口 , 即使用 -x 选项 。例如 , gcc -xc xxx 表示以编译 C 语言代码的方式编译 xxx 文件;而 gcc -xc++ xxx 则表示以编译 C++ 代码的方式编译 xxx 文件 。有关 -x 选项的用法 , 后续会给出具体样例 。
但如果使用 g++ 指令 , 则无论目标文件的后缀名是什么 , 该指令都一律按照编译 C++ 代码的方式编译该文件 。也就是说 , 对于 .c 文件来说 , gcc 指令以 C 语言代码对待 , 而 g++ 指令会以 C++ 代码对待 。但对于 .cpp 文件来说 , gcc 和 g++ 都会以 C++ 代码的方式编译 。
4、问:c语言预处理、编译、汇编、链接这四个过程 , 在linux分别由哪些实现方式
答复如下:
在Linux系统上 , C语言预处理、编译、汇编和链接这四个过程可以使用以下工具实现:
预处理 - 可以使用GNU C(cpp)工具进行预处理 。例如 , 在终端中输入以下命令来生成预处理后的代码:
cpp hello.c > hello.i
编译 - 可以使用GCC(GNU)或Clang等C语言编译器进行编译 。例如 , 在终端中输入以下命令将预处理后的代码编译成目标文件:
gcc -c hello.i -o hello.o
汇编 - 可以使用GNU(gas)或其他汇编器将编译后的目标文件转换为汇编代码 。例如 , 在终端中输入以下命令将目标文件汇编成汇编代码:
objdump -d hello.o > hello.s