1序言

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

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

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

2实践

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

  

#include <stdio.h>

int main(void)
{
printf("hello world!\n");
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!\n");
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生成可执行文件。

第一课 GCC入门的更多相关文章

  1. 第二课 GCC入门之静态库以及共享库

    序言: 前面一课讲了gcc的简单入门,包括gcc编译步骤:预处理:编译:汇编:链接.今天这节课就来讲下linux的库也欢迎大家吐糟共同学习. 原理: linux系统中分为2种库:静态库和共享库.静态库 ...

  2. CodeIgniter框架入门教程——第一课 Hello World!

    本文转载自:http://www.softeng.cn/?p=45 今天开始,我将在这里连载由我自己编写的<CodeIgniter框架入门教程>,首先,这篇教程的读着应该是有PHP基础的编 ...

  3. 互联网金融爬虫怎么写-第一课 p2p网贷爬虫(XPath入门)

    版权声明:本文为博主原创文章,未经博主允许不得转载. 相关教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 手把手教你写电商爬虫-第三课 ...

  4. Asp.Net Web API 2(入门)第一课

    Asp.Net Web API 2(入门)第一课   前言 Http不仅仅服务于Web Pages.它也是一个创建展示服务和数据的API的强大平台.Http是简单的.灵活的.无处不在的.你能想象到几乎 ...

  5. Android入门第一课之Java基础

    通知:由于本周六场地申请没通过,所以本周的培训临时取消. 今天给大家带来的是Android入门的第一课,由于教室申请的不确定性,因此,每次培训的内容都会在博客先提前释放出来.首先Android的APP ...

  6. Elasticsearch7.X 入门学习第一课笔记----基本概念

    原文:Elasticsearch7.X 入门学习第一课笔记----基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https: ...

  7. emacs 入门第一课:Emacs里的基本概念

    Table of Contents 无聊的开场白 buffer(缓冲区) window(窗口)与frame Emacs的mode Emacs Lisp 函数function.命令command.键绑定 ...

  8. 【JavaScript从入门到精通】第一课 初探JavaScript魅力-01

    第一课 初探JavaScript魅力-01 JavaScript是什么 如今我们打开一个大型的网站,都会有很多JS效果的功能和应用.对于学过CSS+HTML的同学,即使是像淘宝那样的网站,用一两天时间 ...

  9. 【JavaScript从入门到精通】第一课

    第一课 初探JavaScript魅力-01 JavaScript是什么 如今我们打开一个大型的网站,都会有很多JS效果的功能和应用.对于学过CSS+HTML的同学,即使是像淘宝那样的网站,用一两天时间 ...

随机推荐

  1. Dubbo—Zookeeper的典型应用

    1.Zookeeper 作为 Hadoop 项目中的一个子项目,是 Hadoop 集群管理的一个必不可少的模块,它主要用来控制集群中的数据,如它管理 Hadoop 集群中的 NameNode,还有 H ...

  2. awk数组处理字符串合并

    需求: 有一文本文件 lessons.txt 内容如下,请使用 awk 处理该文本,并输出内容如 result.txt lessons.txt: 634751 预排 568688 预排 386760 ...

  3. Tuning 16 Using Materialized view

    物化视图表示在数据库的其他地方另外存放了一份as 后边的内容, 如果只是普通view, 那么 rowid 是相同的, view相当于指针, 它指向基表. 而物化视图的rowid 与基表是不一样的, 所 ...

  4. struts2中,Action通过什么方式获得用户从页面输入的数据,又是通过什么方式把其自身的数据传给视图的?

    struts2中,Action通过什么方式获得用户从页面输入的数据,又是通过什么方式把其自身的数据传给视图的? 解答: 1)可以直接通过与表单元素相同名称的数据成员(需要存在符合命名规范set和get ...

  5. 更改MVC注册Areas的顺序,掌控Areas的运作

    [转自:http://www.cnblogs.com/dozer/archive/2010/04/14/change-order-of-MVC-Areas.html] 一.前言 首先,有人要问,为什么 ...

  6. 【BZOJ】2017: [Usaco2009 Nov]硬币游戏(dp+神题+博弈论)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2017 这题太神了,我想了一个中午啊 原来是看错题一直没理解题解说的,一直以为题解是错的QAQ “开始 ...

  7. C#反射实例学习及注意内容

    C#反射的入门学习首先要明白C#反射提供了封装程序集.模块和类型的对象等等.那么这样可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性.如果代码中 ...

  8. node读写Excel操作

    目支持写Excel的node.js模块: node-xlsx: 基于Node.js解析excel文件数据及生成excel文件: excel-parser: 基于Node.js解析excel文件数据,支 ...

  9. Node.js模块 require和 exports

    https://liuzhichao.com/p/1669.html http://www.cnblogs.com/pigtail/archive/2013/01/14/2859555.html

  10. IO文件读写

    *b表示二进制模式访问,但是对于Linux或者Unix系统来说这个模式没有任何意义,因为他们把所有文件都看做二进制文件,包括文本文件 一.三种方法读取文件  方法1:open f=open(" ...