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. java 关键字static

    在Java中static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,当然也可以修饰代码块. Java把内存分为栈内存和堆内存, 栈内存用来存放一些基本类型的变量.数组和对象的引用, 堆 ...

  2. 【c语言】将正数变成相应的负数,将负数变成相应的正数

    <pre name="code" class="cpp">// 将正数变成相应的负数,将负数变成相应的正数 #include <stdio.h ...

  3. CSS中的绝对定位(absolute)误区

    这几天在慕课上看视频学习,偶然听到几个老师都说:CSS绝对定位在没有其他有除static定位的包含块的情况下是以body进行定位,如果要想相对当前元素的父元素来定位,父元素一定要设置position: ...

  4. TortoiseGit上传项目代码到github方法(超简单)

    Github是咱广大开发者用的非常多的项目代码版本管理网站,项目托管可以是私人的(private)或者公开的(public),私人的收费,一个月7美金.咱这里就只说我们个人使用的,一般都是代码对外开放 ...

  5. Dapper的语法应用

    (1)返回某个整型或字符串类型的字段 public string GetSupplierCodeById(int Id) { using( var conn=DbFactory.CreateConne ...

  6. c++调用python函数时,使用PyArray_SimpleNewFromData(nd, dims, typenum, data)函数时出现内存错误的问题

    示例程序: int main(int argc, char *argv[]){ PyObject *pName, *pModule, *pDict, *pFunc, *pValue, *pArgs,* ...

  7. Linq to Entity 多条件 OR查询

    技术背景:框架MVC,linq to Entity 需要一定的lambda书写能力 问题:在简单的orm中完成一些简单的增删查改是通过where insert delete update 完成的,但是 ...

  8. A day

    今天推荐一部微电影,从老人的视角看这个社会. 老人在途中买橘子的经历仿佛是看到了当年自己的影子. A day对于有些人来说,很长.对于某些人来说很短暂.这一天所做的事情就是穿过马路走过天桥去水果店买四 ...

  9. Alcor(安国)AU6387量产修复(u盘修复)

    2010年买的U盘,自从去年坏掉一直没有用. 今天试着把它修理的心态,看看能修好不能.不料真的被我搞好了. 下面是教程链接 如果你的芯片跟我的一样,我人品保证你可以成功. 如果你看教程之后量产 成功, ...

  10. 160805、oracle查询:取出每组中的第一条记录

    在Java 9发布之前,我们来分享一些Java 8开发技巧 [以下为译文] 在使用JAVA 8进行开发多年后,结合个人使用IntelliJ IDEA的心得,我总结了以下几个JAVA8技巧供大家参考. ...