zoukankan      html  css  js  c++  java
  • Linux系统GCC常用命令和GCC编译过程描述

    前言:

    GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。后来又
    扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改
    名GNU编译器套件(GNU Compiler Collection)。(百度百科,想了解自己查询)


    一.GCC程序的编译过程大概分四个阶段

    • 预处理(Pre-Processing)
    • 编译(Compiling)
    • 汇编(Assembling)
    • 链接(Linking)

    二.简单HelloWorld程序的编译过程

    示例:HelloWorld.c

    1 #include <stdio.h>
    2 int main()
    3 {
    4   printf("Hello World!
    ");
    5   return 0;
    6 }

    Ctrl+Alt+T  --->打开控制台--->输入vim HelloWorld.c

    1. 执行如下命令:$ gcc -o HelloWorld HelloWorld.c


    运行如下 : $ ./HelloWorld
    输出: HelloWorld!


    2. 分步编译如下:
    (1) $ gcc –E HelloWorld.c -o HelloWorld.i

    可以输出HelloWorld.i文件中存放着HelloWorld.c经预处理之后的代码。打开HelloWorld.i文件,看一看,就明白了。后面那条指令,是直接在命令行窗口中输出预处理后的代码.

    gcc的-E选项,可以让编译器在预处理后停止,并输出预处理结果。在本例中,预处理结果就是将stdio.h 文件中的内容插入到HelloWorld.c中了。


    //预处理结束
    //这时候你看一下HelloWorld.i ,可以看到插进去了很多东西。


    (2) $ gcc –S HelloWorld.i     

    gcc的-S选项,表示在程序编译期间,在生成汇编代码后,停止,-o输出汇编代码文件。

    查看下HelloWorld.s //生成汇编代码后结束



    (3)生成汇编代码文件HelloWorld.s以后,需要gas汇编器负责将其编译为目标文件,如下:

    $ gcc –c HelloWorld.c
    或者:
    $ gcc -c HelloWorld.c –o HelloWorld.o
    或者:
    $ gcc -c HelloWorld.i -o HelloWorld.o

    //编译结束
    //生成 HelloWorld.o文件


    (4) $ gcc HelloWorld.o –o HelloWorld 生成连接,可执行文件(HellWorld重新生成的可执行文件)

    gcc连接器是gas提供的,负责将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。

    附加的目标文件包括静态连接库和动态连接库。

    对于上一小节中生成的HelloWorld.o,将其与C标准输入输出库进行连接,最终生成程序HelloWorld可执行文件

    输入命令:gcc HelloWorld.o –o HelloWorld--->生成如下图:

    3. 多个程序文件的编译

    一般情况一个程序都是有若干个文件源文件组成,所以编译的时候需要形成多个编译单元,使用GCC编译器可以将多个源文件编译成所需要的程序

    比如:源文件有main.c     a.c     b.c  最终生成一个可执行的文件main

    比如:一个工程有main.c a.c b.c生成test的可执行文件。
    编译命令如下:
    $ gcc –c main.c a.c b.c –o main
    或者:
    $ gcc –o main main.c a.c b.c

    GCC仍然会按照预处理、编译和链接的过程依次进行

    大概过程相当于:

    gcc -c main.c -o main.o

    gcc -c a.c -o a.o

    gcc -c b.c -o b.o

    最后:

    gcc main.o a.o b.o -o main

  • 相关阅读:
    POJ 3419 Difference Is Beautiful (DP + 二分 + rmq)
    CodeForces 755C PolandBall and Forest (并查集)
    CodeForces 754D Fedor and coupons (优先队列)
    CodeForces 753C Interactive Bulls and Cows (Hard)
    CodeForces 754C Vladik and chat (DP+暴力)
    HDU 1996 汉诺塔VI (排列组合)
    HDU 1995 汉诺塔V (水题)
    HDU 2077 汉诺塔IV (递推)
    HDU 2064 汉诺塔III (递推)
    How Javascript works (Javascript工作原理) (二) 引擎,运行时,如何在 V8 引擎中书写最优代码的 5 条小技巧
  • 原文地址:https://www.cnblogs.com/JiYF/p/6104003.html
Copyright © 2011-2022 走看看