zoukankan      html  css  js  c++  java
  • Gcc简介与常用命令

    一、对于GUN编译器来说,程序的编译要经历预处理、编译、汇编、连接四个阶段,如下图所示:

    在预处理阶段,输入的是C语言的源文件,通常为*.c。它们通常带有.h之类头文件的包含文件。这个阶段主要处理源文件中的#ifdef、 #include和#define命令。该阶段会生成一个中间文件*.i,但实际工作中通常不用专门生成这种文件,因为基本上用不到;若非要生成这种文件 不可,可以利用下面的示例命令:

    gcc -E  test.c -o test.i

    在编译阶段,输入的是中间文件*.i,编译后生成汇编语言文件*.s 。这个阶段对应的GCC命令如下所示:

    gcc -S test.i -o test.s 

    在汇编阶段,将输入的汇编文件*.s转换成机器语言*.o。这个阶段对应的GCC命令如下所示:

    GCC -c test.s -o test.o 

    最后,在连接阶段将输入的机器代码文件*.s(与其它的机器代码文件和库文件)汇集成一个可执行的二进制代码文件。这一步骤,可以利用下面的示例命令完成:

    GCC test.o -o test 

    二、GCC常用模式

    编译模式和编译连接模式

    2.1 下面以一个例子来说明各种模式的使用方法。为简单起见,假设我们全部的源代码都在一个文件test.c中,

      要想把这个源文件直接编译成可执行程序,可以使用以下命令:

    gcc -o test test.c

      用这个命令,生成二进制可执行文件test,使用./test命令可以运行它。

      其中,-o 是生成可执行文件的输出选项。

      如果我们只想让源文件生成目标文件(该文件虽然也是机器代码但不可执行),可以使用标记-c ,详细命令如下所示:

    gcc -c test.c

      该命令生成一个目标文件test.o

    2.2多个文件

      迄今为止,我们谈论的程序仅涉及到一个源文件;

      现实中,一个程序的源代码通常包含在多个源文件之中,这该怎么办?没关系,即使这样,用GCC处理起来也并不复杂,见下例:

    gcc -o test first.c second.c third.c

    该命令将同时编译三个源文件,即first.c、second.c和 third.c,然后将它们连接成一个可执行程序,名为test。

     三、常用选项

      许多情况下,头文件和源文件会单独存放在不同的目录中。例如,假设存放源文件的子目录名为./src,而包含文件则放在层次的其他目录下,如./inc。当我们在./src 目录下进行编译工作时,如何告诉GCC到哪里找头文件呢?方法如下所示:

    gcc test.c –I../inc -o test

      上面的命令告诉 gcc 包含文件存放在./inc 目录下,在当前目录的上一级。如果在编译时需要的包含文件存放在多个目录下,可以使用多个-I 来指定各个目录

    gcc test.c –I../inc –I../../inc2 -o test

      这里指出了另一个包含子目录inc2,较之前目录它还要在再上两级才能找到

      另外,我们还可以在编译命令行中定义符号常量。为此,我们可以简单的在命令行中使用-D选项即可,如下例所示:

    gcc -DTEST_CONFIGURATION test.c -o test

      上面的命令与在源文件中加入下列命令是等效的:

    #define TEST_CONFIGURATION
  • 相关阅读:
    06 is和==的区别 encode()编码 decode()解码
    05 dic的增删改查 字典的嵌套 考试题dic.get()的相关使用
    03 编码 int ,bool,str的常用操作 主要讲str
    01 基本数据类型 变量 if语句
    04 列表的增删改查 常用方法 元祖 range
    02 while循环 格式化输出 运算符
    多校2 Harmonious Army hdu6598 网络流
    P3159 [CQOI2012]交换棋子 网络流
    P2172 [国家集训队]部落战争 最大流
    P2402 奶牛隐藏 网络流
  • 原文地址:https://www.cnblogs.com/wiessharling/p/3579157.html
Copyright © 2011-2022 走看看