• 第一课 GCC入门


    1序言

      gcc是一个可移植的编译器,支持多种硬件平台;也不仅仅是一个本地编译器也是一个跨平台编译器;支持多张语言编译时按照模块化设计支持多种语言。

      gcc编译过程:预处理(预处理器);编译(编译器);汇编(汇编器);链接(链接器);

      gcc编译简化:参数ESc-->文件iso;

    2实践

      先建立一个c文件hello.c,并输入如下打印出"hello world!";

      

    #include <stdio.h>
    
    int main(void)
    {
        printf("hello world!
    ");
        return 0;
    }
    

      

      2.1下面来记录一下gcc编译过程:

      1>预处理阶段      

    gcc -E hello.c -o hello.i     //使用-E参数表示编译只到预处理阶段,这个阶段生成的文件是后缀为i,也可以在-E前面加上-Wall参数显示编译信息(以下如此),初学者非常有用。
    

      2>编译阶段

    gcc -S hello.i -o hello.s     //使用-S参数把预处理阶段生成的文件编译成汇编文件
    

      3>汇编阶段

    gcc -c hello.s -o hello.o    //使用-c参数把汇编文件编译生成目标文件,这是二进制文件

          4>链接阶段

    gcc hello.o -o hello    //目标文件链接生成可执行文件不用参数,此阶段会把相关的一些系统静态库动态库文件加入进来生成可执行文件
    

      以上4个步骤也可以使用一条命令完成:

    gcc hello.c -o hello    //直接把c源文件编译成可执行文件

      2.2gcc多文件编译  

    上面的例子是针对一个源文件的,但是往往我们在开发中是多个文件那这又怎么操作呢,下面把上面的代码拆分一下如下:

      1.建立hello_fn.h文件,文件内容如下:  

    #ifndef  _HELLO_FN_H
    #define _HELLO_FN_H
    void print(const char* str);
    #endif
    

      2.建立hello_fn.c文件,内容如下:

    #include <stdio.h>
    #include "hello_fn.h"
    
    void print(const char* str)
    {
        printf(str);
    }    
    

      3.建立hello_main.c文件,内容如下;

    #include "hello_fn.h"
    
    int main(void)
    {
         print("hello world!
    ");
         return 0;   
    }
    

      下面分步骤生成目标文件在生成可执行文件:

    gcc -Wall -c hello_fn.c -o hello_fn.o    
    gcc -Wall -c hello_main.c -o hello_main.o
    gcc -Wall hello_fn.o hello_main.o -o hello_main
    

      也可以一次性生成可执行文件:

    gcc -Wall hello_fn.c hello_main.c -o hello_main
    

      这样结果是一样,第一种方法适合多个目标文件其中一个模块发生变化此时只需要编译改变的模块最后在把所有的目标文件链接成可执行文件,现在假如hello_fn.c文件发生变化,只需要编译hello_fn.c为目标文件hello_fn.o,最后链接hello_main.o生成可执行文件。

          

  • 相关阅读:
    python—9个基础常识-python小白入门系列
    学完Python,我决定熬夜整理这篇总结...
    Python中时间戳、时间字符串、时间结构对象之间的相互转化
    [Python3] 超级码力在线编程大赛初赛 第2场 题解
    利用人工智能算法让古代皇帝画像以及古代四大美女画像动起来(模仿偶像胡歌剧中角色表情动作
    python爬取酷我音乐(收费也可)
    Python基础入门:从变量到异常处理–阿里云天池
    python 使用 wechatsogou wkthmltopdf 导出微信公众号文章
    ASP.NET WebAPI 连接数据库
    从头开始一步一步实现EF6+Autofac+MVC5+Bootstarp极简的实现前后台ajax表格展示及分页实现
  • 原文地址:https://www.cnblogs.com/luoliang/p/3843654.html
Copyright © 2020-2023  润新知