zoukankan      html  css  js  c++  java
  • Linux C编程 GCC的使用

    本篇文章面向一些会linux文件操作与vim基本命令,编程大佬请移步勿喷。

    gcc是默认安装的,但是其还缺少常用的头文件和库文件,所以还需要build-essential这个包,可以在联网状态下使用如下命令

    $sudo apt-get install build-essential

    (apt-get是Ubuntu下的软件管理命令,它可以安装、删除、更新系统中的软件包)

    安装完成后,可以使用gcc -v命令查看gcc的版本号。


    一、编译器gcc的使用

    1.gcc支持的一些源文件后缀名

    后缀 源文件
    .c C语言源文件
    .C .cc .cxx C++源文件
    .m Object-C源文件
    .i 经过预处理后的C源文件
    .ii 经过预处理后的C++源文件
    .s .S 汇编语言源文件
    .h 预处理文件(头文件)
    .o 目标文件
    .a 存档文件

    2.gcc编译程序的流程

    源文件(.c)——>预处理(.i)——>编译——>汇编(.s)——>链接——>可执行文件

    (filename.c)  (预处理器)    (编译器) (汇编器)       (连接器)   (excutefile)

    (1)预处理,这是C语言的第一阶段,此时gcc需要对C语言源文件中包含的各种头文件和宏定义进行处理,如#define,#include,#if等(文件名后缀为  .i)

    (2)编译,这个过程gcc根据输入的C语言源文件来产生汇编语言,由于通常是立即调用汇编程序,所以其输出一般不保存在文件中。在编译步骤中gcc首先检查代码的规范性、是否存在语法错误等,以确定代码的功能,然后将C语言代码翻译成汇编语言代码。(文件名后缀为 .s)

    (3)汇编,gcc将刚得到的汇编语言用于输入,产生具有 .o扩展名的目标文件。

    (4)链接,在本阶段中各目标文件被gcc放在可执行文件的适当位置上,该程序引用的函数也放在可执行文件中。


      1. Linux的可执行文件并没有像 Windows 那样有明显的.exe后缀名, 只需向其分配x(可执行)权限即可 sudo chmod u+x excutefile




    3、gcc常用选项说明

    选项 说明
    -c 仅对源文件进行编译,不链接生成可执行文件。
    在对目标文件查错或只产生目标文件时可使用该选项
    -o filename 将经过gcc处理过的结果保存为filename,这个结果可以是预处理文件、汇编文件、
    目标文件、或者是最终的可执行文件。
    -g or -gdb 在可执行文件中加入调试信息,方便程序的调试。如果使用"-gdb"选项,表示加入gdb扩展的调试信息,
    以便gdb来进行调试。
       




    4.用gcc编译一个C程序

    // filename: hello.c
    #include <stdio.h>
    int main(int argc, char **argv)
    {
        printf("Hello");
    }
    
    

    上述文件保存为hello.c文件

    ps:gcc hello.c -o hello -------第二个hello为文件名,名字任取

    一个简单的-o选项可以省略很多中间步骤,一i次性输出可执行文件,但是从编译的角度来看,这条命令背后是一系列繁杂的工作。


    5.gcc具体原理

    第一步:

    $ gcc -E hello.c -o hello.i

    得到一个预处理器处理后的C源文件,可以用vim打开看看

    -E参数可以使gcc在预处理完成后结束编译

    第二步:

    $ gcc -c hello.i -o hello.o

    进行编译过程

    请记住,gcc预处理源文件的时候,不会进行语法错误的检查;

    语法错误会在第二步进行,比如花括号不匹配、行末尾没有分号、关键字错误。

    第三步:

    gcc将目标文件链接为一个可执行文件,一个大致的编译流程结束。

    gcc hello.o -o hello





  • 相关阅读:
    Django框架之虚拟环境搭建
    Ubantu16.04系统优化
    关于装双系统Ubantu16.04+Win10引导问题
    网络编程相关
    数据库常用语句
    javascript异步编程的六种方式
    关于 CSS 的一些小 tips
    typeof 返回的数据类型 及 javascript数据类型中的一些小知识点
    JavaScript || 和 && 的总结
    正则表达式
  • 原文地址:https://www.cnblogs.com/bryce1010/p/9387174.html
Copyright © 2011-2022 走看看