zoukankan      html  css  js  c++  java
  • 第一课 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生成可执行文件。

          

  • 相关阅读:
    laravel phpstorm IDE 代码提示
    vue的样式绑定
    asp.net mvc视图中使用entitySet类型数据时提示出错
    Linq to SQL 中将数字转换为字符串
    jquery submit()不能提交表单的解决方法
    命名空间“System.Web”中不存在类型或命名空间名称“Optimization”(是否缺少程序集引用?)
    没有为扩展名“.cshtml”注册的生成提供程序
    WP REST API: 设置和使用OAuth 1.0a Authentication(原文)
    解决"要执行请求的操作,WordPress需要访问您网页服务器的权限"
    Mysql添加用户错误:ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value解决方法
  • 原文地址:https://www.cnblogs.com/luoliang/p/3843654.html
Copyright © 2011-2022 走看看