第九讲基于Linux的C程序开发.ppt

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九讲基于Linux的C程序开发

Linux下C程序开发基础 GCC编译器 Linux库文件 Makefile文件 GDB调试工具 一个程序开发的案例 GCC编译器 GNU项目的编译器,可以编译C、C++等语言编写的程序。 gcc的使用 Gcc常使用的命令选项 -c 编译生成.o目标文件 -o 生成指定的输出文件 -I 指定额外的头文件搜索路径 -L 指定额外的函数库搜索路径 -l 链接时搜索指定的函数库 -E只进行预编译 -g 生成调试信息 -Wall 显示所有警告信息 -w 不显示警告信息 -shared 生成共享库时使用 深入理解GCC的工作过程 预处理阶段:由预处理程序cpp负责完成。 输入为.c文件,输出.i文件 宏代换:将程序中的宏用其定义进行替换。 文件包含:把指定的文件插入include所在行位置取代该命令行, 从而把指定的文件和当前的源程序文件连成一个源文件。 编译阶段:由编译器egcs负责完成。 输入.i文件,输出.s文件 首先要检查代码的规范性、是否有语法错误等。然后将代码翻译成汇编语言。 汇编阶段:由汇编器as负责完成。 将编译阶段生成的.s文件转换成目标文件(.o文件)。 链接阶段:由链接器ld负责完成。 由目标文件.o生成可执行文件。 搜索库文件,找到程序中所引用函数的具体实现时,如果是静态库,便把函数实现拷贝到可执行文件;如果是动态库,只是简单指向需要的库函数。 Linux的库文件 静态库(.a) 在源程序编译链接时,将静态库中相关代码连接到程序中,最终生成可执行文件。 可执行文件较大 在库文件发生改动时,需要重新对源程序重新编译,以生成新的可执行程序。 共享库(.so) 在源程序编译链接时,只是指向需要使用的库文件,在实际执行可执行程序的过程中(将可执行程序载入内存时),才将相关代码载入内存。 可执行文件较小 在库文件发生改动时,用户程序不需要作任何工作 静态库的建立和使用 ar rc libname.a src.o gcc src.c –o exename libname.a 共享库的建立和使用 gcc –shared –o libname.so src.o gcc src.c –o exename ./libname.so 在程序运行开始载入库文件,程序运行结束再将库文件调出内存。 共享库的另外一种使用方式 在用户程序中使用dlopen、dlsym、dlclose等函数动态调用共享库,获得库中函数的句柄。 在将用户程序载入内存开始运行时,并没有将库文件代码载入内存,只有在执行到dlsym调用时,才将相关库文件代码载入内存,在执行到dlclose时,将库文件从内存中调出。 只适用于共享库 Makefile文件 Makefile文件是实现某个目标所需的依赖关系和依赖规则的集合。依赖关系用来说明某个目标依赖哪些文件才得以生成;依赖规则具体描述了如何利用这些文件生成目标。 make命令:专门为复杂软件的开发提供的自动化管理工具。通过它,程序员可以方便地管理软件编译的内容、方式、时机,从而使程序员能把精力集中在代码编写上。 makefile的默认文件名为GNUmakefile、makefile或Makefile。make命令在执行时将按顺序查找默认的makefile文件。(当名字不是这三种时,使用make -f命令)。多数Linux程序员使用第三种文件名Makefile。 一个Makefile文件可以有多个目标,每个目标对应了: 依赖关系 目标名字(target),即make最终需要创建的文件,如可执行文件和目标文件、也可以是要执行的动作,如“clean”、“install”。 一个或多个依赖文件(dependency)列表(可能为空),通常是编译目标文件所需要的其他文件。 依赖规则 一系列命今(command),是make执行的动作,通常是达到目标(生成可执行文件、目标文件、执行动作)所要执行的命令,每个命令占一行,且每个命令行的起始字符必须为TAB字符。 GDB调试工具 软件调试的方法 添加大量的输出语句(如printf),以跟踪代码的执行流程,观察变量的值以及内存状态等等。 已有调试工具。开发人员可以方便地在程序运行的时候单步跟踪自己的代码,或者通过断点暂时中止程序执行,监视关键的数据结构等。 GDB 运行被调试程序,设置所有的能影响该程序的参数和变量 保证被调试程序在指定条件下停止运行 当被调试程序停止时,让开发人员检查发生了什么 根据每次调试器的提示信息做相应改变,以此探索解决问题的方法,然后再继续查找别的问题。 一个程序开发的案例 什么是GUI Graphic User Interface,图形用户接口。开发人员可以使用它开发图形化的人机交互界面,以提供给用户美观、直观的外观以及方便、简单的操作。

文档评论(0)

xy88118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档