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:为可执行文件生成位置无关代码


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值