




已阅读5页,还剩54页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux下C编程 Linux下编程概述系统调用与库函数gcc gdb的使用make 编程语言 高级语言C C Java ELFbinaryformatExcutableandLinkableFormat支持动态连接和重定位脚本语言Shell sh bash csh kshPython Perl tcl tk sed awk 开发工具 GCCGNUCCompiler GNUCompilerCollectionGDBGNUDebuggerThegdbcommand其他调试工具 xxdgbBinaryutilitiesas ld ar Makeapt getinstallbuild essential workbench IDEEmacs xemacsEclipseKdevelopKylix3命令行Editor vi vim gvim emacs xemacsSourceReader vi emacs ctags etags sourcenavigatorConfigureTools automake autoconf m4 从程序员角度看Linux 系统调用和函数库 系统调用 属Linux内核Linux内核的对外接口 用户程序和内核之间唯一的接口系统调用可以实现从用户态到核心态的转变系统调用有300多个mansyscalls查看所有的系统调用man2系统调用名 如man2open 不同系统调用所需的头文件不同系统调用所需的头文件存放在 usr include及其子目录或 usr include sys中系统底层开发 进程管理等方面的涉及系统内部操作的问题 一般利用系统调用 可以提高程序的执行效率 函数库 glibc 不属操作系统内核依赖于系统调用建立在系统调用的上层 提供的功能比系统调用强 使用也比较方便库文件是编写用来进行代码重用的预编译的函数的集合查找库函数man3库函数名 如man3fopen库函数的头文件包含在usr include下相应的库存放在lib或usr lib下一般应用程序调用库函数实现 函数库分两大类静态库 a gcc ar动态库 共享库 so gcc函数库命名库文件的名字通常是以lib开始的 余下的部分表示这个库是什么 最后的部分是以 开始的用来表明这个库的类型 如 libc so标准c库 libm so代表算术库 调用关系 调用方式 编程中要包含系统调用或库函数所要的头文件使用非标准库函数时 编译时还要指定所使用的库 系统调用示例 在当前目录下创建用户可读写文件 hello txt 在其中写入 Hello Softwareweekly 关闭该文件 再次打开该文件 读取其中的内容并输出在屏幕上 库函数调用 C语言编译过程 GCC 可以编译多种语言CC JavaObjective C C FORTRANAda 4stagesofGCC预处理Preprocessor cppcommand 编译Compiler cccommand 汇编Assembler ascommand 链接Linker ldcommand GCC所支持的后缀名解释 GCC选项 使用方法 gcc options filename 基本选项 E 只对源程序进行预处理 S 只对源程序进行预处理 编译 c 执行预处理 编译 汇编而不链接 ooutput file 指定输出文件名 g 产生调试工具必需的符号信息 O On 在程序编译 链接过程中进行优化处理 Wall 显示所有的警告信息 Idir 指定额外的头文件搜索路径 Ldir 指定额外的库文件搜索路径 lname 链接时搜索指定的库文件 DMACRO DEFN 定义MACRO宏 fpic 输出的对象模块式按照可重定位地址 relocatableaddressing 方式生成的 shared 创建共享库 示例1 test c tmp test h 编译 运行 指定头文件所在目录 gcc I tmp DSTRING youareright otesttest c test 示例2 静态库 first csecond c 单独的编译这些函数来创建目标文件gcc cfirst csecond c创建静态库ar rcslibtest afirst osecond o为库创建一个头文件lib h 编写程序program c来调用库函数中的函数 使用静态库来编译program c需要指定库的位置编译及库名gcc oprogramprogram c L ltest program 示例3 共享库 first csecond c 编译共享库 gcc c fpicfirst csecond c gcc sharedfirst osecond o ohello so或合成一条命令 gcc fpic sharedfirst csecond c olibtest so为共享库创建一个头文件 test c调用两个共享库中的函数 编译 运行 gcctest c otest L ltest将libtest so复制到lib目录或 exportLD LIBRARY PATH LD LIBRARY PATH test注意 运行时动态链接 GDB GDB GNUDebug 调试gcc编译的程序设置断点监视变量值单步执行修改变量值编译时要带 g属性 如gcc ghello c ohellogdb运行要调试的程序 GDB命令 make与makefile multi fileprojectIDEmakemake makefilemakefile描述模块间的依赖关系make命令根据makefile对程序进行管理和维护make判断被维护文件的时序关系 makefile的命名 GNUmakefilemakefileMakefile当make寻找makefile文件时 它试图搜寻具有如下的名字的文件 按顺序 GNUmakefile makefile Makefile makefile模板 一个简单的Makefile文件包含一系列的 规则 其样式如下 目标 target 依赖 prerequiries 命令 command 目标 target 依赖 prerequiries 命令 command 目标 target 要产生的文件的名称通常是可执行文件或OBJ文件或执行的动作名称以 开始的是伪目标依赖 prerequiries 生成目标所需的文件一个目标经常有几个依赖也可以没有依赖只有动作命令 command make执行的动作可以含有几个命令 每个命令占一行每个命令行前面必须是一个tab字符命令中可以包含shell命令注释 以 开始 make命令执行一般格式 make ffilename targetname 缺省目标 如make默认为第一个目标伪目标不能做缺省目标指定目标 maketargetname如makeclean从目录中删除生成的目标文件和可执行文件edit 指定目标每次make首先检查它的依赖文件是否已经更新指定make读取的makefile文件 make ffilename GNU的make的工作过程如下 依次读入各makefile文件初始化文件中的变量分析所有规则为所有的目标文件创建依赖关系链根据依赖关系和时间数据 确定哪些目标文件要重新生成执行相应的生成命令 示例1 HelloWorld小程序的makefilehello hello ogcc ohellohello ohello o hello cgcc chello c 示例2 依赖关系如下 Makefilemyprog main oprog1 oprog2 oprog3 ogcc omyprogmain oprog1 oprog2 oprog3 omain o main clib1 hgcc cmain omain clib1 hprog1 o prog1 clib1 hgcc cprog1 oprog1 clib1 hprog2 o prog2 cgcc cprog2 oprog2 cprog3 o prog3 clib2 hgcc cprog3 oprog3 clib2 h 示例3 makefile扩展 makefile扩展变量 用户定义变量 环境变量 自动变量或预定义变量隐式规则条件语句嵌套 Using infomake 用户自定义变量 定义变量的一般格式是 引用变量 变量名 示例3中定义成变量OBJECTS main okbd ocommand odisplay o insert osearch ofiles outils o 改进后的makefile 自动变量 自动变量 make中定义了一些它们的值会因环境的不同而发生改变的变量 表示规则中的目标文件集合 所有比目标文件还新的那些相依文件的集合 以空格分开 规则中的第一个依赖文件的名称 规则中所有不重复的依赖文件的集合 以空格分开 仅当目标文件是一个静态库成员时 表示规则中的目标成员名 而此时 表示相应库文件的名称 如果目标文件的后缀是make所识别的 则 就是去掉后缀的目标文件名 但该引用只有用在隐含规则中才有意义 预定义变量归档库 ARARFLAGS汇编命令 ASASFLAGSC编译命令 CCCPPCFLAGSCPPFLAG
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园超市消防知识培训内容课件
- 校园消防知识培训课件演练
- 校园消防知识培训内容课件
- 药师专业考试试题及答案
- 初级底盘考试题及答案
- 金桥劳务面试题及答案
- 中国古建筑考试试题及答案
- 淘宝处罚考试题及答案
- 上海医疗队考试试题及答案
- 换届面试试题及答案
- 浙江省2025年中考真题数学试卷及答案
- 渝23TG02 钢管桁架预应力混凝土叠合板图集 DJBT50-165
- 记录管理规程培训
- 2025-2030中国印刷行业市场深度调研及发展趋势前景与面临的问题对策研究报告
- 物流园区保安管理制度
- 中国美术学院非教学岗位招聘笔试真题2024
- 化工中控操作管理制度
- T/SXCAS 015-2023全固废低碳胶凝材料应用技术标准
- 2025年思想政治理论考试试卷及答案介绍
- 辽宁工业大学《机械制造概论》2023-2024学年第二学期期末试卷
- 留疆战士考试题库
评论
0/150
提交评论