通信软件设计方法LINUX下C语言程序学习教案_第1页
通信软件设计方法LINUX下C语言程序学习教案_第2页
通信软件设计方法LINUX下C语言程序学习教案_第3页
通信软件设计方法LINUX下C语言程序学习教案_第4页
通信软件设计方法LINUX下C语言程序学习教案_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、会计学1通信软件设计通信软件设计(shj)方法方法LINUX下下C语言语言程序程序第一页,共54页。2第1页/共54页第二页,共54页。3上讲回顾(hug)开机 - 执行内存00000开始的程序 - 阅读bios配置并初始化 - 调光盘或硬盘0000道扇区的程序进入内存某个(mu )区域 - 执行这个程序 - 这个程序是操作系统的第一级引导程序 - 这个程序把LINUX中的boot装入内存 - 执行boot,装入LINUX内核 - 启动0号进程 - 0号根据系统配置表(类似注册表)进程生成后台进程 - 为每个终端启动getty进程,等待用户登陆 - getty为登陆用户启动shell进程第2页

2、/共54页第三页,共54页。4进程是动态调入内存的进程是动态调入内存的内核主要(zhyo)部分是静态的也有部分内核程序是动态调入的称为动态模块和进程的区别是不能被调度去取得CPU而是等待进程来调用(dioyng)它(和静态内核一样)第3页/共54页第四页,共54页。5shell的作用(zuyng)等待终端用户输入(shr)命令 - 检查命令的语法合法性 - 到文件系统中找这个命令(可执行文件) - 调入这个命令(可执行文件) - 执行这个可执行文件(程序) - 执行完返回shell内核getty - shell - 命令字串 - 这个命令界面 - shell内存管理CPU调度文件系统硬盘管理命

3、令程序shell shell shell shell第4页/共54页第五页,共54页。6LINUX下如何下如何(rh)编译编译C语语言程序言程序vi的使用的使用第5页/共54页第六页,共54页。7LINUX操作系统(co zu x tn)Hello! 李阳第6页/共54页第七页,共54页。8C语言代码语言代码(di m)(程序)(程序)int main (int argc, char *argv)if (argc vi-man vi vi-5 5、more vi-more vi-第8页/共54页第九页,共54页。10第9页/共54页第十页,共54页。11ShellApplicationsOpe

4、rationSystemHardWare第10页/共54页第十一页,共54页。12第11页/共54页第十二页,共54页。13第12页/共54页第十三页,共54页。14第13页/共54页第十四页,共54页。15第14页/共54页第十五页,共54页。16第15页/共54页第十六页,共54页。17第16页/共54页第十七页,共54页。18第17页/共54页第十八页,共54页。19第18页/共54页第十九页,共54页。20普通普通(ptng)文件文件tar(tar.gz)文件文件c(z)vfx(z)vf第19页/共54页第二十页,共54页。21n清除屏幕命令清除屏幕命令(mng lng)clear 第

5、20页/共54页第二十一页,共54页。22第21页/共54页第二十二页,共54页。23第22页/共54页第二十三页,共54页。24第23页/共54页第二十四页,共54页。251 1、cd ext-1cd ext-12 2、vi hello.cvi hello.c3 3、学习、学习vivi的使用的使用 1 1)命令模式使用的命令:)命令模式使用的命令: dd dd 删除一行删除一行(yxng)(yxng) p p 拷贝刚才删除的一行拷贝刚才删除的一行(yxng)(yxng) 上下左右键上下左右键 光标的移动光标的移动 Del Del键键 删除一个符号删除一个符号 ZZ ZZ i i 进入插入进入

6、插入/ /输入和编辑模式(输入和编辑模式(EscEsc退出)退出) : 进入末行命令模式进入末行命令模式第24页/共54页第二十五页,共54页。264 4、学习、学习vivi的使用的使用 2 2)插入模式使用的命令:)插入模式使用的命令: 字母,数字字母,数字(shz)(shz),符号,回车等,符号,回车等 上下左右键上下左右键 光标的移动光标的移动 Esc Esc键键 返回命令模式返回命令模式 3 3)末行命令模式使用的命令:)末行命令模式使用的命令: w w 写入文件,写入文件,w! w! 强行写入文件强行写入文件 q q 退出编辑,退出编辑,q! q! 强行退出强行退出vivi第25页/

7、共54页第二十六页,共54页。27命令模式命令模式Shell提示符提示符末行模式末行模式退出退出vi启动启动vi:自动返回自动返回文本插入命令文本插入命令ESC插入模式插入模式第26页/共54页第二十七页,共54页。28状态状态(zhungti)行行第27页/共54页第二十八页,共54页。29第28页/共54页第二十九页,共54页。30第29页/共54页第三十页,共54页。31第30页/共54页第三十一页,共54页。32dh :删除前一个字符:删除前一个字符w :.当前字当前字b :.前一个字前一个字d :.当前行当前行0 :.从前一个字符从前一个字符.行首行首.$ :.从当前字符开始到行尾的

8、所有字符从当前字符开始到行尾的所有字符) : .当前字符当前字符.句尾句尾( :.句首句首 : .段尾段尾 : .段首段首M : .屏幕中间行屏幕中间行H : .屏幕首行屏幕首行L : .屏幕底行屏幕底行第31页/共54页第三十二页,共54页。33第32页/共54页第三十三页,共54页。341 1、cd ext-1cd ext-12 2、vi hello.cvi hello.c3 3、gcc -o h hello.cgcc -o h hello.c4 4、./h./h5 5、vi makefilevi makefile,编辑,编辑(binj)(binj)如下如下 h:hello.c h:hel

9、lo.c gcc -o h hello.c gcc -o h hello.c6 6、rm -r rm -r * *.o h, .o h, 之后用之后用llll7 7、makemake8 8、llll9 9、./h LiYang./h LiYang第33页/共54页第三十四页,共54页。35第34页/共54页第三十五页,共54页。361、gcc包含的包含的c/c+编译器编译器gcc,cc,c+,g+,gcc和和cc是一样的,是一样的,c+和和g+是一样的是一样的,一般,一般c程序就用程序就用gcc编译,编译,c+程序就用程序就用g+编译编译2、gcc的基本用法的基本用法gcc test.c这样将

10、编译出一个名为这样将编译出一个名为a.out的程序的程序gcc test.c -o test这样将编译出一个名为这样将编译出一个名为test的程序,的程序,-o参数用来指定参数用来指定(zhdng)生成程序的名字生成程序的名字3、为什么会出现、为什么会出现undefined reference to xxxxx错误?错误?首先这是链接错误,不是编译错误首先这是链接错误,不是编译错误 有指定有指定(zhdng)链接程序要用到得库,比如你的程序里用链接程序要用到得库,比如你的程序里用到了一些数学函数,那么你就要在编译到了一些数学函数,那么你就要在编译数里指定数里指定(zhdng)程序要链接数学库,

11、方法是在编译命令程序要链接数学库,方法是在编译命令行里加入行里加入 -lm。第35页/共54页第三十六页,共54页。374、-l参数和参数和-L参数参数-l参数就是用来指定程序要链接的库,参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?么库名跟真正的库文件名有什么关系呢?就拿数学就拿数学(shxu)库来说,他的库名是库来说,他的库名是m,他的库文件名是,他的库文件名是libm.so,很容易看出,把库文件名的头,很容易看出,把库文件名的头lib和尾和尾.so去掉就是库名了去掉就是库名了。我们自已要用到一个第三方提供的库名字叫我们

12、自已要用到一个第三方提供的库名字叫libtest.so,那么我们,那么我们只要把只要把libtest.so拷贝到拷贝到/usr/lib里,编译时加上里,编译时加上-ltest参数,我们就参数,我们就能用上能用上libtest.so库了(当然要用库了(当然要用libtest.so库里的函数,我们还需库里的函数,我们还需要与要与libtest.so配套的头文件)。配套的头文件)。第36页/共54页第三十七页,共54页。385、-include和和-I参数参数-include用来包含头文件,但一般情况下包含头文件都在源用来包含头文件,但一般情况下包含头文件都在源码里用码里用#include xxxx

13、xx实现实现(shxin),-include参数很少用参数很少用。-I参数是用来指定头文件目录,参数是用来指定头文件目录,/usr/include目录一般是不目录一般是不用指定的,用指定的,gcc知道去那里找,但是如果头文件不在知道去那里找,但是如果头文件不在/usr/include里我们就要用里我们就要用-I参数指定了,比如头文件放在参数指定了,比如头文件放在/myinclude目录里,那编译命令行就要加上目录里,那编译命令行就要加上-I/myinclude参参数了,如果不加你会得到一个数了,如果不加你会得到一个xxxx.h: No such file or directory的错误。的错误

14、。-I参数可以用相对路径,比如头文件在当参数可以用相对路径,比如头文件在当前目录,可以用前目录,可以用-I.来指定。来指定。第37页/共54页第三十八页,共54页。396、-O参数参数这是一个程序优化参数,一般用这是一个程序优化参数,一般用-O2就是,用来优化程序用的,就是,用来优化程序用的,比如比如gcc test.c -O2,优,优化得到化得到(d do)的程序比没优化的要小,执行速度可能也有所提的程序比没优化的要小,执行速度可能也有所提高高7、-shared参数参数编译动态库时要用到,比如编译动态库时要用到,比如 gcc -shared test.c -o libtest.so第38页/

15、共54页第三十九页,共54页。408、几个相关的环境变量、几个相关的环境变量PKG_CONFIG_PATH:用来指定:用来指定pkg-config用到的用到的pc文件的路径文件的路径,默认是,默认是/usr/lib/pkgconfig,pc文件是文本文件,扩展名是文件是文本文件,扩展名是.pc,里面定义开发包的安装路径,里面定义开发包的安装路径,Libs参数和参数和Cflags参数等等。参数等等。CC:用来指定:用来指定c编译器。编译器。CXX:用来指定:用来指定cxx编译器。编译器。LIBS:跟上面的:跟上面的-libs作用差不多。作用差不多。CFLAGS:跟上面的跟上面的-cflags作用

16、差不多。作用差不多。CC,CXX,LIBS,CFLAGS手动编译时一般用不上,在做手动编译时一般用不上,在做configure时有时用到,一般情况下不用管。时有时用到,一般情况下不用管。环境变量设定环境变量设定(sh dn)方法:方法:export ENV_NAME=xxxxxxxxxxxxxxxxx第39页/共54页第四十页,共54页。419、关于交叉编译、关于交叉编译交叉编译通俗交叉编译通俗(tn s)地讲就是在一种平台上编译出能运行在体系结构地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上,比如在我们的不同的另一种平台上,比如在我们的PC平台平台(X86 CPU)上编译出能运

17、行上编译出能运行在在sparc CPU平台上的程序,编译得到的程序在平台上的程序,编译得到的程序在X86 CPU平台上是不能平台上是不能运行的,必须放到运行的,必须放到sparc CPU平台上才能运行。当然两个平台用的都是平台上才能运行。当然两个平台用的都是linux。这种方法在异平台移植和嵌入式开发时用得非常普遍。这种方法在异平台移植和嵌入式开发时用得非常普遍。相对与交叉编译,我们平常做的编译就叫本地编译,也就是在当前平台相对与交叉编译,我们平常做的编译就叫本地编译,也就是在当前平台编译,编译得到的程序也是在本地执行。编译,编译得到的程序也是在本地执行。用来编译这种程序的编译器就叫交叉编译器

18、,相对来说,用来做本地编用来编译这种程序的编译器就叫交叉编译器,相对来说,用来做本地编译的就叫本地编译器,一般用的都是译的就叫本地编译器,一般用的都是gcc,但这种,但这种gcc跟本地的跟本地的gcc编译编译器是不一样的,需要在编译器是不一样的,需要在编译gcc时用特定的时用特定的configure参数才能得到支持参数才能得到支持交叉编译的交叉编译的gcc。为了不跟本地编译器混淆,交叉编译器的名字一般都有前缀,比如为了不跟本地编译器混淆,交叉编译器的名字一般都有前缀,比如sparc-xxxx-linux-gnu-gcc,sparc-xxxx-linux-gnu-g+ 等等等等第40页/共54页

19、第四十一页,共54页。4210、交叉编译器的使用(shyng)方法使用(shyng)方法跟本地的gcc差不多,但有一点特殊的是:必须用-L和-I参数指定编译器用sparc系统的库和头文件,不能用本地(X86)的库(头文件有时可以用本地的)。 例子:sparc-xxxx-linux-gnu-gcc test.c -L/path/to/sparcLib -I/path/to/sparcInclude 第41页/共54页第四十二页,共54页。43第42页/共54页第四十三页,共54页。441、make 大型程序维护工具大型程序维护工具 Makefile 或或 makefile: 告诉告诉make维护

20、一个大型程序,该做什么。维护一个大型程序,该做什么。 Makefile说明了组成程序的各模块间的相互关系及更新模块时必须进说明了组成程序的各模块间的相互关系及更新模块时必须进行的动作,行的动作,make按照这些说明自动地维护这些模块。按照这些说明自动地维护这些模块。 Netdefs.h 头文件头文件 Subrs.c network.c 源文件源文件编译编译 Subrs.o network.o 目标目标(mbio)文件文件连接连接 Network 可执行文件可执行文件第43页/共54页第四十四页,共54页。45在在makefile(Makefile)中,中,自顶向下说明各模块之间的依赖关系及实现

21、方法:自顶向下说明各模块之间的依赖关系及实现方法: network: network.o subrs.o (1) cc o network network.o subrs.o (2) network.o: network.c netdefs.h (3) cc c network.c (4) subrs.o: subrs.c netdefs.h (5) cc c subrs.c (6)其中其中(3)(6)可以简化可以简化(jinhu)为:(隐含的规则)为:(隐含的规则) network.o subrs.o: netdefs.h#make#make network#make f makefile第

22、44页/共54页第四十五页,共54页。46 2、makefile要点要点(yodin)宏(变量)宏(变量)CC=gcc$(CC) test.c$: current target$:first prerequisite$:all prerequisites后缀规则(后缀规则(suffix rules)第45页/共54页第四十六页,共54页。47 .c.o:$(CC) -c $(CFLAGS) -o $ $%.o:%.c$(CC) -c $(CFLAGS) -o $ $第46页/共54页第四十七页,共54页。48$,$,$代表的意义分别是:代表的意义分别是: $-目标文件目标文件 $-所有的依赖所有的依赖(yli)文件文件 $-第一个依赖第一个依赖(yli)文件。文件。 .c.o: 这个规则表示所有的这个规则表示所有的 .o文件都是依赖文件都是依赖(yli)与相应的与相应的.c文件的。文件的。 第47页/共54页第四十八页,共54页。49LINUX操作系统(co zu x tn)Hello! 李阳第48页/共54页第四十九页,共54页。50C语言代码(程序)语言代码(程序)int main (int argc,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论