zoukankan      html  css  js  c++  java
  • GCC编译命令


    参考链接:http://c.biancheng.net/view/7930.html(力荐!!)

    无论是 C 还是 C++ 程序,其从源代码转变为可执行代码的过程,具体可分为 4 个过程,分别为预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。默认情况下,gcc 指令会一气呵成,直接将源代码历经这 4 个过程转变为可执行代码,且不会保留各个阶段产生的中间文件

    test.c文件

    #include <stdio.h>
    
    void main() {
            printf("Hello World!");
    }
    

    GCC 一步完成

    gcc test.c
    

    GCC 编译器会在当前目录下生成一个名为 a.exe 的可执行文件

    GCC -E:预处理

    gcc -E test.c
    

    结果疯狂刷屏···

    默认情况下 gcc -E 指令只会将预处理操作的结果输出到屏幕上,并不会自动保存到某个文件。因此该指令往往会和 -o 选项连用,将结果导入到指令的文件中。

    gcc -E test.c -o test.i
    

    生成一个预处理文件

    另外,我们可以为 gcc 指令再添加一个 -C 选项,阻止GCC删除源文件和头文件中的注释:

    gcc -E -C test.c -o test.i
    

    GCC -S 编译非汇编文件

    gcc -S test.i
    

    生成test.s汇编文件
    也可通过添加 -o 选项,令 GCC 编译器将编译结果保存在我们指定的文件中。

    需要注意的是,gcc -S 指令操作的文件并非必须是经过预处理后得到的 .i 文件,-S 选项的功能是令 GCC 编译器将指定文件处理至编译阶段结束。这也就意味着,gcc -S 指令可以操作预处理后的 .i 文件,也可以操作源代码文件:
    如果操作对象为 .i 文件,则 GCC 编译器只需编译此文件;
    如果操作对象为 .c 或者 .cpp 源代码文件,则 GCC 编译器会对其进行预处理和编译这 2 步操作。

    在此基础上,如果想提高文件内汇编代码的可读性,可以借助 -fverbose-asm 选项,GCC 编译器会自行为汇编代码添加必要的注释,例如:

    gcc -S test.c -fverbose-asm
    

    GCC -c选项:生成目标文件

    gcc -c test.s
    

    生成同名但后缀为.o的文件,这就是经过汇编操作得到的目标文件。
    当然如果必要的话,还可以为 gcc -c 指令在添加一个 -o 选项,用于将汇编操作的结果输入到指定文件中

    需要强调的一点是,和 gcc -S 类似,gcc -c 选项并非只能用于加工 .s 文件。事实上,-c 选项只是令 GCC 编译器将指定文件加工至汇编阶段,但不执行链接操作。这也就意味着:
    如果指定文件为源程序文件(例如 demo.c),则 gcc -c 指令会对 demo.c 文件执行预处理、编译以及汇编这 3 步操作;
    如果指定文件为刚刚经过预处理后的文件(例如 demo.i),则 gcc -c 指令对 demo.i 文件执行编译和汇编这 2 步操作;
    如果指定文件为刚刚经过编译后的文件(例如 demo.s),则 gcc -c 指令只对 demo.s 文件执行汇编这 1 步操作。

    得到生成目标文件之后,接下来就可以直接使用 gcc 指令继续执行链接操作

    gcc test.o
    

    默认生成a.exe可执行文件

    GCC -o选项:指定输出文件

    GCC -L选项:手动添加链接库

    链接器把多个二进制的目标文件(object file)链接成一个单独的可执行文件。

    GCC 的-l选项(小写的 L)可以让我们手动添加链接库。

    链接其它目录中的库

    通常,GCC 会自动在标准库目录中搜索文件,如果想链接其它目录中的库,就得特别指明。有三种方式可以链接在 GCC 搜索路径以外的链接库

    • 把链接库作为一般的目标文件,为 GCC 指定该链接库的完整路径与文件名。
    • 使用-L选项,为 GCC 增加另一个搜索链接库的目录:
    • 把包括所需链接库的目录加到环境变量 LIBRARYPATH 中。
    天将降大任于是人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能。
  • 相关阅读:
    【C++标准库】C++11新特性
    使用线程池
    Halcon相机硬触发采集图片
    C#之线程同步
    多线程之异常处理
    java基础 Arrays
    java基础 static关键字
    java基础 String
    c# 更新web.config
    java 基础
  • 原文地址:https://www.cnblogs.com/chap-xw/p/13946438.html
Copyright © 2011-2022 走看看