当前课程知识点:互联网体系结构 >  第二周:Socket网络编程 >  编译、构建和调试 >  Video

返回《互联网体系结构》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《互联网体系结构》慕课在线视频列表

Video课程教案、知识点、字幕

编程需要用的工具,包括编译、构建和调试

实际上主要涉及到三个工具

那就是gcc

是用来编译的

还有用来构建命令make,还有一个就是gdb

我们先看gcc

在默认情况下ubuntu并没有提供这个gcc编译器

因为是一个linux桌面发行版

主要是个图形化界面的东西

给普通用户使用的

它就是

如果程序员要用他的话

还需要再安装一个编译的工具

这地方

他已经做了一个打包好的build-essential

我们通过这么一个命令

就可以把这个工具安装好

熟悉的就是c程序

他的一个编译

当然其他的编程语言类似了是吧

类似

但对于编译型的语言基本上都这样

我们从源代码然后

把它编译成汇编代码

然后呢

又通过汇编器

就是我们在这边来预处理的

我待会用命令演示一下而已

然后那边变成编译成目标文件

这个目标文件就和当前的CPU

我们之前讲过abi

就是CPU的指令集这地方

那就是二进制的CPU的指令集

.asm的就是当前CPU所支持的这个汇编代码

然后呢

我们通过连接器把它连接成一个可执行文件

们当启动这个可执行文件执行的时候

就是加载到内存里面的执行

整个一个从c代码额变成一个可执行的运行的程序是吧

当前正在运行的程序

他大概经历这么一个阶段

但是呢

我们正常情况都是gcc

他是一个前端程序

它后背后有就是汇编器,有预处理,有链接器

如果我们只需要掌握gcc这么一个命令及其他的参数

我们就可以把程序的编译就可以搞起了

但是

就是因为就是如果仅仅使用gcc的了

当这个源代码比较多的时候

我们的项目我们的项目可能就是刚开始

我们写一个很简单的程序

比如说HelloWorld

那么就这个用gcc编译还比较简单

如果我们的项目有几百个

甚至上千个文件的时候

那么我们想要就是通过gcc这个命令来编译的话

可能就比较困难了的话就比较复杂了

我们就需要用构建工具

也就是工程文件来帮我们组织好

这个项目先编哪些源代码

再边哪些最后怎么链接是吧

就是帮我们很好的组织起来

那我们先来看gcc的使用

对吧gcc的用法

我们这地方可以写一个简单的程序

我们把这几个参考命令

我们一个一个的来

这时候

我们用gcc就可以编译的

helloworld

这时候编译出来的是

a.out

我们也可以指明一个程序名

我们先看

他的输出

这个gcc呢

但我们就是这么来

编译就是gcc背后帮我们把所有的编译

汇编链接预处理等等

所有的工作都给屏蔽掉了

但是我们一个开发人员

应该对编译背后的工作有一个了解

对吧就是有一个了解

我们通过就是gcc提供的参数命令的方式

我们来分解它

这个编译过程,分解这个编译过程

我们先来看一下

首先我们看第一个有一个E

E的参数对吧这个呢

还是就是一个预处理

我们先看看效果哈gcc

-E

我们这说指名-o就指明他的

我们这叫hello.c

通过E参数就是生成一个.cpp,有一个预处理

cpp预处理吧

cpp预处理了

这时候我们打开这个cpp

我们可以看到

我们可以看到这个程序

前面加了很多东西对吧

我如果看到最后的

我发现最后才是

我们写的代码

而前面的那个include stdio就是通过预处理之后他都把它包含进来了

include进来

所以这时候是把一些那个libc的函数原型等等都include进来

这样呢

就是包括宏替换等等

也都会在这个阶段完成

就是预处理阶段

预处理阶段预处理完之后呢

我们还可以将预处理的文件,通过就是-x指明

他是我通过预处理文件通过-S指明我是要

把它编译成汇编代码

我们可以使用这么一个命令啊

但是我们也可以直接用

-S输出成汇编

我们一来这两个命令

我们都是要试一下

我们先来就是

output

-S是指输出成汇编 hello.s

然后呢

hello.cpp

这样那我们就可以编译出来一个

少一个-o

你就说

我们这地方输出的目标是hello.s

这样我们输出来

我们可以看一下这个我们输出来的hello.s

里面呢

再说一个就是汇编代码了

movq是64位的汇编

就是因为我们当前的CPU是64位的x86的64位

所以这边movq他的寄存器也是

rsp对吧

等等

以r开头的

这是

我们也可以看到就是我们这边call put

也就是依赖的一个就是

函数,printf

我们把这个文件就是编译成汇编了

但是我们还可以通过简单的方式把它编译成就是直接-S -o

hello

这地方为了区分

我就hello.s1

为了做区分

我们可以直接从hello.c

编译

我可以看一看hello.s1

他编译出来的

效果是一样的吧

那接着呢

这是就是汇编的

就是我们讲这就是通过gcc来编译

我们还可以把就是汇编码呢

通过asm来编译成.o对吧

那我们可以看一下这边的命令参考

我们通过-X assembler 汇编器

通过汇编器

但是我们也可以用as

实际上

它内部gcc也是一个前端的工具程序,先让他背后调用了as帮我们画这个点S文件也是汇编码

输出成.o目标代码

这时候就是把汇编代码编译成二进制的

也就是机器代码了

对吧

我们可以试一下这句命令

一个是

.c文件

这是直接输出的

这个算是我们最常用的是吧

这个是我们最常用的

这时候我们输出的效果是一样的

是的

我们as命令一样

我们是通过输出.o

但是我们那就是

然后

我们通过as就是把汇编代码汇编成

目标代码是吧

这两个命令也可以

这时候我们生成了

就我们就生成了这个

生成的目标代码之后的目标代码呢

我们可以把它链接成可执行文件

对吧链接成可执行文件

我们也是通过两种方法

一种是我们最常用的-o hello对吧

然后hello.c对吧

这样的我们可以把它连接成

但是我们也可以用ld命令会比较复杂一点

因为你要指明就是当前系统的libc的库在哪里

所以那个命令会用起来会比较复杂的

我们还是通过gcc的方式来使用

但是我们也可以用

然后呢

我们是将.o文件链接成可执行文件

但是这两个链接出来的效果是一样

结果是一样的

都是

我们这样呢

我们就对这个

恩我们就对这个从C代码编译成可执行文件

并且能把它执行起来这么一个过程

有一个简单的理解

有简单的理解

互联网体系结构课程列表:

第一周:互联网概述

-课程内容简介

--Video

-网络协议基础

--Video

--Video

--Video

--Video

-上网浏览网页背后的网络通信过程

--Video

--Video

-实验环境安装配置

--Video

-网络相关命令

--Video

--Video

-本周作业

--外部链接

第二周:Socket网络编程

-编译、构建和调试

--Video

--Video

--Video

-Socket接口

--Video

--Video

-UDP范例代码

--Video

-TCP范例代码

--Video

-本周作业

--外部链接

第三周:TCP协议与Linux内核

-TCP协议概述

--Video

--Video

-Linux网络协议栈源代码简介

--Video

-Linux系统的编译、构建和调试

--Video

--Video

-TCP协议源代码分析

--Video

-本周作业

--外部链接

第四周:IP协议及路由表

-IP协议基础

--Video

-路由表

--Video

-路由转发举例

--Video

-IP协议栈源代码解析

--Video

-路由协议简介

--Video

-网络层数据传输路径解析

--Video

-本周作业

--外部链接

第五周:ARP协议及ARP缓存

-ARP协议基础

--Video

-ARP解析的过程

--Video

-ARP解析在网络传输过程中的作用

--Video

-ARP协议栈源代码解析

--Video

-本周作业

--外部链接

第六周:二层交换网络及转发过滤数据库

-以太网基础

--Video

--Video

-交换机的学习、转发和过滤数据库

--Video

-常见二层协议

--Video

-数据链路层在Linux网络协议栈中的一些关键代码分析

--Video

-本周作业

--外部链接

第七周:DNS协议及域名存储与解析

-DNS协议基础

--Video

-DNS域名的存储

--Video

-DNS域名解析过程分析

--Video

-本周作业

--外部链接

第八周:互联网架构设计背后的渊源

-互联网架构设计的最初动机与核心目标

--Video

-互联网架构设计的具体目标及背后重要权衡

--Video

--Video

--Video

-课程考核

--外部链接

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。