GCC(全称GNU Compiler Collection)是GNU工具链的主要组成部分,最初由Richard Stallman于1985年开始开发,它原本只能处理C语言,但现在已支持多种编程语言,包括C++、Objective-C、Java、Fortran、Pascal、Go和D等。
安装与使用
2.1 安装GCC
在大多数Linux发行版中,GCC通常是默认安装的,如果需要手动安装,可以使用包管理器进行安装,在基于Debian和Ubuntu的系统中,可以使用以下命令:
sudo apt-get install gcc
还可以安装其他特定的GCC组件,如g++或gfortran。
2.2 基本命令
GCC的基本语法如下:
gcc [options] [filenames]
[options]
表示参数,[filenames]
表示相关文件的名称,一些常用的参数及含义如下表所示:
参数名称 | 含义 |
-E | 仅执行预处理,不进行编译、汇编和链接(生成后缀为 .i 的预编译文件) |
-S | 执行编译后停止,不进行汇编和链接(生成后缀为 .s 的汇编代码文件) |
-c | 编译程序,但不链接成为可执行文件(生成后缀为 .o 的目标文件) |
-o | 指定输出文件名 |
-O/-O1/-O2/-O3 | 优化代码,减少代码体积,提高代码效率,但会增加编译时间 |
-l [lib] | 指定程序要链接的库,[lib]为库文件名称 |
-L [dir] | 指定-l所使用的库文件所在路径 |
-I [dir] | 增加 include 头文件路径 |
-D [define] | 预定义宏 |
-static | 链接静态库生成目标文件,禁止使用动态库 |
-shared | 生成共享文件,然后可以与其他文件链接生成可执行文件 |
-fpic | 生成适用于共享库的与地址无关的代码(PIC) |
-fPIC | 生成与位置无关的代码,适用于使用动态库 |
-w | 不输出任何警告信息 |
-Wall | 开启编译器的所有警告选项 |
-g | 生成调试信息,方便gdb调试 |
-v | 查看gcc编译器的版本,显示gcc执行时的详细过程 |
--help | 查看帮助信息 |
--version | 查看版本信息 |
编译过程
GCC的编译过程可以分为四个阶段:预处理(Pre-Processing)、编译(Compiling)、汇编(Assembling)和链接(Linking)。
1、预处理:将包含的文件插入源文件中,将宏定义展开、根据条件编译命令选择要使用的代码,最后将代码输出到一个“.i”文件中等待进一步处理。
2、编译:将预处理后的C语言代码翻译成汇编语言代码,并输出到一个“.s”文件中。
3、汇编:将汇编代码翻译成一定格式的机器代码,在Linux系统上一般表现为ELF目标文件(OBJ文件),并输出到一个“.o”文件中。
4、链接:将汇编生成的OBJ文件、系统库的OBJ文件、库文件链接起来,最终生成可以在特定平台运行的可执行程序。
实例
以一个简单的C程序为例,演示如何使用GCC进行编译和运行:
1、编写C程序:创建一个名为hello.c的文件,内容如下:
#include <stdio.h> int main() { printf("Hello, World! "); return 0; }
2、编译C程序:在终端中使用gcc编译器来编译程序并生成目标文件:
gcc -o hello hello.c
3、运行C程序:在Linux中,你可以以运行生成的对象文件的方式来运行C程序:
./hello
这将显示出你所期望的输出:“Hello, World!”。
小伙伴们,上文介绍linux gcc-c的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。
本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/80217.html