Linux技术——gcc基础

GNU CC(通常称为GCC)是GNU项目的编译器,它能够编译C、C++语言编写的程序。
gcc是Linux开发的基础,gcc能够支持多种不同的C语言版本,同时提供Linux、Unix、Windows下的编译版本。
使用gcc,程序员可以对编译过程有更多的控制,编译过程分为3个阶段。
–预处理;
–汇编;
–链接;

使用gcc,程序员可以控制生成二进制执行文件中调试代码的数量和类型。
和其他编译器一样,gcc也可以优化执行代码。
gcc是个交叉平台编译器,所以能够在当前CPU平台上为不同操作系统开发软件。
gcc对C和C++进行了一些扩展,有助于提高执行效率以及编译器进行代码优化。
gcc可以让跨平台编程更加容易,降低代码移植代价。

深入了解gcc之前,我们先看一个小例子。

#include <stdio.h>
int main(int arg, char *args[])
{
    if (arg < 3)
        printf("请输入2个参数\n");
    else
    {
        int a = atoi(args[1]);
        int b = atoi(args[2]);
        printf("%d%d 等于 %d\n", a, b, a + b);
    }
    return 0;
}

在命令行键入命令编译和运行这段程序
$gcc -o hello hello.c
这行命令告诉gcc对源程序hello.c进行编译和链接,并使用参数-o指定创建名为hello的可执行程序。
整个过程看上去仿佛是一气呵成的,但其实是分几步的
–预编译源代码;
–编译目标代码;
–链接程序。

Linux技术——gcc基础_第1张图片

预编译
在命令行键入命令。
$gcc -o hello1.c -E hello.c
这行命令告诉gcc对源程序hello.c进行预编译,预编译结果输出到hello1.c文件中。

编译
在命令行键入命令。
$gcc -o hello.o -c hello1.c
这行命令告诉gcc对源程序hello.c进行编译,但不链接,编译输出到hello.o文件中。

链接
在命令行键入命令。
$gcc -o hello hello.o
这行命令告诉gcc对源程序hello.o进行链接,生成可执行程序hello。

gcc各个选项的意思:
-o filename 输出文件名,如果没指定filename,默认为a.out
-c 只编译,不链接
-E 预编译
-S 汇编
-g 包含调试信息
-I 指定包含头文件路径
-D 编译时定义指定的宏,相当于源代码中的#define宏定义
-L 指定要链接库文件的路径
-l 链接指定的库文件
-O 优化编译后的代码
-w 关闭所有告警信息
-Wall 开启所有告警信息
-Werror Warning当做错误处理
-static 强制链接时链接静态库
-fPIC 编译与位置无关的代码,主要用于编译共享库
-shared 生成共享库so文件
-pedantic 发现一些不符合 ANSI/ISO C标准的代码

gcc是如何知道文件类型呢?
通过文件扩展名判断文件类型

c C语言源文件
cpp C++源文件
s 汇编语言源文件
o 编译后的目标代码文件
a,so 编译后的库文件

你可能感兴趣的:(gcc)