第一课 GCC入门
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入门的更多相关文章
- 第二课 GCC入门之静态库以及共享库
序言: 前面一课讲了gcc的简单入门,包括gcc编译步骤:预处理:编译:汇编:链接.今天这节课就来讲下linux的库也欢迎大家吐糟共同学习. 原理: linux系统中分为2种库:静态库和共享库.静态库 ...
- CodeIgniter框架入门教程——第一课 Hello World!
本文转载自:http://www.softeng.cn/?p=45 今天开始,我将在这里连载由我自己编写的<CodeIgniter框架入门教程>,首先,这篇教程的读着应该是有PHP基础的编 ...
- 互联网金融爬虫怎么写-第一课 p2p网贷爬虫(XPath入门)
版权声明:本文为博主原创文章,未经博主允许不得转载. 相关教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 手把手教你写电商爬虫-第三课 ...
- Asp.Net Web API 2(入门)第一课
Asp.Net Web API 2(入门)第一课 前言 Http不仅仅服务于Web Pages.它也是一个创建展示服务和数据的API的强大平台.Http是简单的.灵活的.无处不在的.你能想象到几乎 ...
- Android入门第一课之Java基础
通知:由于本周六场地申请没通过,所以本周的培训临时取消. 今天给大家带来的是Android入门的第一课,由于教室申请的不确定性,因此,每次培训的内容都会在博客先提前释放出来.首先Android的APP ...
- Elasticsearch7.X 入门学习第一课笔记----基本概念
原文:Elasticsearch7.X 入门学习第一课笔记----基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https: ...
- emacs 入门第一课:Emacs里的基本概念
Table of Contents 无聊的开场白 buffer(缓冲区) window(窗口)与frame Emacs的mode Emacs Lisp 函数function.命令command.键绑定 ...
- 【JavaScript从入门到精通】第一课 初探JavaScript魅力-01
第一课 初探JavaScript魅力-01 JavaScript是什么 如今我们打开一个大型的网站,都会有很多JS效果的功能和应用.对于学过CSS+HTML的同学,即使是像淘宝那样的网站,用一两天时间 ...
- 【JavaScript从入门到精通】第一课
第一课 初探JavaScript魅力-01 JavaScript是什么 如今我们打开一个大型的网站,都会有很多JS效果的功能和应用.对于学过CSS+HTML的同学,即使是像淘宝那样的网站,用一两天时间 ...
随机推荐
- springbatch操作DB
一.需求分析 使用Spring Batch对DB进行读写操作: 从一个表中读取数据, 然后批量的插入另外一张表中. 二.代码实现 1. 代码结构图: 2. applicationContext.xml ...
- 编写可维护的JavaScript----笔记(三)
1.块语句花括号的使用 在JavaScript中,注入if和for语句有两种写法,使用花括号包裹的多行代码或者不使用花括号的单行代码.但强烈建议不论是单行还是多行代码,都应该使用花括号. 2.花括号的 ...
- jQuery设置和获取HTML、文本和值
jQuery设置和获取HTML.文本和值 按 Ctrl+C 复制代码 <script type="text/javascript"> //<![CDATA[ $( ...
- java 学习笔记--mybatis 三剑客(mybatis)
Java项目中使用Mybatis入门程序 wanna 关注 2017.03.23 14:33* 字数 270 阅读 1243评论 0喜欢 5 MyBatis 是支持定制化 SQL.存储过程以及高级映射 ...
- 8127 timeout!!! 搞死人啊
ti 81xx 系列的 timeout搞死人啊 种类繁多 坑爹啊!! 今天终于找出了8127的一种以个timeout bug情况,妹的这个问题坑了我将近两个月,xxxx,这里我想说下情况,有些地方可能 ...
- oracledbconsole db启动问题
oracledbconsole db启动问题 被这个OracleDBconsole服务无法启动的问题折磨了两个星期了,今天很幸运,在网上无意间看到了一位大侠的思路,虽然错误的情况并不完全相同,但他的思 ...
- 【Ubuntu】Windows硬盘安装Ubuntu14.04
参考:http://diybbs.zol.com.cn/1/33925_1981.html http://www.cnblogs.com/allenjin/archive/2011/11/26/22 ...
- WPF数据验证(4)——响应与获取验证错误
1780 前面的示例中,有关用户接受到错误的唯一指示是在违反规则的文本框周围的红色轮廓.为了提供更多信息,可以处理 Error 事件,但存储或清除错误时会引发该事件,但前提是必须确保已将 Bindin ...
- uva748 - Exponentiation 高精度小数的幂运算
uva748 - Exponentiation Exponentiation Problems involving the computation of exact values of very ...
- 网络虚拟化之FlowVisor:网络虚拟层(上)
概念解释:切片:虚拟网络的一个实例 一. 网络虚拟化(虚拟网络) 人类社会的发展在很大方面得益于自然界,飞机受益于鸟,雷达受益于蝙蝠等等,所以专门有个学科为仿生学就是研究和模仿生物的特殊本质,利用生物 ...