gcc编译

gcc是GUN推出的功能强大,性能优越的多平台编译器,就是以前的GUN C 编译器。可以在多重平台上编译出可执行程序的编译器集合,集成C,C++,fortran,Java,Fortran和Pascal等多种语言编译器。
他可以运行各种liunx 发行版,BSD,以及solaris等多种操作系统,并能够编译X86,X86-64等不同硬件平台上。还可以实现不同平台上的交叉编译,如在liunx平台上编译windows下的可用的软件。
gcc后面通过文件后缀进行区分
以“ .c"为后缀的文件,都是C语言代码文件
以” .a"为后缀的文件,都是有目标文件构成的档案库文件。
以“.C" “.cpp” " .cc"或者" .cxx"为后缀的文件,是C++源代码文件。
以” .h"为后缀的文件,都是程序所包含的头文件
以“ .i"为后缀的文件,都是已经预处理过的C源代码文件。
以” .ii"为后缀的文件,都是已经预处理过的C++源代码文件。
以“ .m"为后缀的文件,都是obiective-C源代码文件。
以” .o"为后缀的文件,都是编译后的目标文件。
以“ .s" 为后缀的文件,是汇编语言的源代码文件
以” .S“为后缀的文件,都是经过预编译的汇编语言源代码文件。

gcc对C 或者c++编译工作大致可分为如下4个步骤:

1:预处理,生成以” .i"的文件
2:将预处理后的文件不转换成汇编语言,生成文件“ .s" (编译器eggs)
3:有汇编变为目标代码(机器代码)生成”.o"的文件(汇编器as)
4:连接目标代码,生成可执行程序(链接器ld)。

gcc的基本用法和常用选项

gcc 选项 文件名
例如:

1:[root@cfhzx ~]# vi hello.c  先创建一个文件并编辑
2编辑内容:内容在下图
3:运行: [root@cfhzx ~]# gcc hello.c  运行hello.c这个文件
4:输出:[root@cfhzx ~]# ./a.out  让他输出在屏幕上
如果未进行指定输出文件名,gcc编译出来的程序后缀名是一个名为a.out的可执行文件。

在这里插入图片描述

gcc常用编译选项:


    -I:指定头文件路径;如 gcc -I./include
    -D:定义一个宏;如 gcc -DHAVE_CONFIG_H,定义宏HAVE_CONFIG_H
    -Wall:开启所有错误提示,可理解为warinig all
    -g:编译过程中保留调试信息,以便gdb能够调试
    -O2:指定编译优化等级为2,optimization
    -pipe:指定编译过程中不同阶段的通信使用pipe管道(有些编译器无法读取管道,目前GNU编译器是ok的)
    -Wp,-D_FORTIFY_SOURCE=2:将逗号分隔的选项传递给预处理器,其中FORTIFY_SOURCE选项用于指定在编译时检查缓冲区溢出的等级
    -fexceptions:启用异常处理,会产生额外的代码用于处理异常,会占用一定量的数据空间(gcc默认为C++打开该选项,为C关闭该选项)
    -fstack-protector:开启栈保护检测,防止缓冲区异常
    --param=ssp-buffer-size=4:--param用于控制一些用于优化的常量,比如内联函数的指令数量限制等,
        ssp-buffer-size用于控制预防堆栈溢出的缓冲区的下限值,和-fstack-protector选项一同使用
    -m64:指定生成64位的x86-64架构代码
    -mtune=generic:为指定的CPU架构优化代码
    -fPIC:生成位置无关的代码,适用于动态链接
    -fPIE:为可执行文件生成位置无关代码


<think>好的,我需要帮助用户了解如何使用GCC进行编译。首先,我需要确保回答符合用户的要求,包括结构清晰、步骤详细,并且引用提供的参考资料。同时,必须遵循系统级指令,比如正确使用LaTeX格式和生成相关问题。 首先,我应该整理GCC的基本使用步骤。用户提供的引用[1]提到GCC是一个广泛使用的编译器,支持多种语言。引用[2]详细介绍了编译过程,包括预处理、编译、汇编和链接四个阶段。因此,我需要将这些步骤分解开来,用简单的中文解释每个阶段,并给出相应的gcc命令示例。例如,预处理使用-E选项,编译成汇编使用-S,汇编成目标文件使用-c,最后链接生成可执行文件。 接下来,用户可能需要知道如何一步完成整个编译过程,即直接从源代码生成可执行文件。这时需要提到gcc-o选项,例如gcc hello.c -o hello。同时,根据引用[3],在链接某些库时可能需要使用-l选项,比如-lglut -lGL -lGLU,这里需要解释这些选项的作用。 然后,常见的编译选项也是用户关心的内容。引用[1]提到了常见的编译选项,如-Wall显示警告,-g生成调试信息,-O优化级别。需要将这些选项分类说明,并给出示例命令,帮助用户理解如何应用这些选项。 此外,处理多文件编译也是实际开发中的常见需求,需要指导用户如何同时编译多个.c文件,或者先生成目标文件再链接。这部分需要给出具体的命令示例,如gcc main.c utils.c -o program,或者分步编译。 最后,生成相关问题。根据用户提供的示例,问题应围绕GCC的更多使用场景、调试方法、优化影响以及静态库和动态库的区别展开。这些问题需要自然相关,并且能够引导用户进一步学习。 整个过程中,需要确保所有技术术语解释清晰,命令示例正确,并且正确引用提供的参考资料。例如,在讲解预处理阶段时,引用[2]中的命令示例gcc -E test.c -o test.i需要被提及,并添加引用标识[^2]。同时,注意所有行内数学表达式如变量或文件名使用$...$格式,而独立公式如可能出现的命令示例使用代码块格式,但根据用户要求,独立公式应使用$$...$$,但在此问题中可能较少涉及数学公式,更多是代码示例,因此需注意代码块的正确使用。 最后检查回答是否符合所有系统级指令,特别是LaTeX的使用是否正确,生成的相关问题是否合适,引用是否正确标注。确保没有使用任何Markdown格式,所有代码示例用三个反引号包裹,并标明语言类型,如python或bash。同时,回答使用中文,结构清晰,分步骤解释,帮助用户逐步理解和应用GCC编译器。</think>### 如何用 GCC 进行编译:使用方法和教程 GCC(GNU Compiler Collection)是广泛使用的编译器套件,支持 C、C++ 等多种编程语言。以下是 GCC 的基本使用方法指南: --- #### 1. **单文件编译** 最简单的编译方式是将源代码直接编译为可执行文件: ```bash gcc hello.c -o hello ``` - `hello.c`:源文件 - `-o hello`:指定输出文件名为 `hello`(默认生成 `a.out`)[^1]。 --- #### 2. **分阶段编译** GCC编译过程分为四个阶段,可逐步执行: - **预处理**:展开宏和头文件 ```bash gcc -E hello.c -o hello.i # 生成预处理文件 hello.i ``` - **编译为汇编代码** ```bash gcc -S hello.i -o hello.s # 生成汇编文件 hello.s ``` - **汇编为目标文件** ```bash gcc -c hello.s -o hello.o # 生成二进制目标文件 hello.o ``` - **链接为可执行文件** ```bash gcc hello.o -o hello # 链接目标文件生成可执行文件 ``` --- #### 3. **常见编译选项** - **显示所有警告**:`-Wall` ```bash gcc -Wall hello.c -o hello ``` - **生成调试信息**:`-g`(用于 GDB 调试) ```bash gcc -g hello.c -o hello ``` - **优化级别**:`-O1`、`-O2`、`-O3` ```bash gcc -O2 hello.c -o hello # 启用中级优化 ``` - **链接外部库**:`-l`(例如 OpenGL 库) ```bash gcc program.c -lglut -lGL -lGLU -o program[^3] ``` --- #### 4. **多文件编译** - **直接编译多个文件**: ```bash gcc main.c utils.c -o program ``` - **分步编译**: ```bash gcc -c main.c # 生成 main.o gcc -c utils.c # 生成 utils.o gcc main.o utils.o -o program ``` --- #### 5. **静态库与动态库** - **生成静态库**: ```bash ar rcs libutils.a utils.o # 打包目标文件为静态库 gcc main.c -L. -lutils -o program ``` - **生成动态库**: ```bash gcc -shared -fPIC utils.c -o libutils.so gcc main.c -L. -lutils -o program ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值