首页 Linux下C编程

Linux下C编程

举报
开通vip

Linux下C编程Linux下C编程Linux下编程概述系统调用与库函数gcc、gdb的使用make编程语言高级语言C/C++,Java,…ELFbinaryformatExcutableandLinkableFormat支持动态连接和重定位脚本语言Shell:sh/bash,csh,kshPython,Perl,tcl/tk,sed,awk…开发工具GCCGNUCCompiler->GNUCompilerCollectionGDBGNUDebuggerThegdbcommand其他调试工具:xxdgbBinaryutilities...

Linux下C编程
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-essentialworkbenchIDEEmacs/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 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 c库,libm.so代表算术库调用关系调用方式编程中要包含系统调用或库函数所要的头文件使用非标准库函数时,编译时还要指定所使用的库系统调用示例在当前目录下创建用户可读写文件“hello.txt”,在其中写入“Hello,Softwareweekly”,关闭该文件。再次打开该文件,读取其中的内容并输出在屏幕上。库函数调用C语言编译过程GCC可以编译多种语言CC++JavaObjective-C/C++FORTRANAda4stagesofGCC预处理Preprocessor(cppcommand)‏编译Compiler(cccommand)汇编Assembler(ascommand)‏链接Linker(ldcommand)‏GCC所支持的后缀名解释未经预处理的汇编语言原始程序汇编程序文件C++头文件(预处理文件)CorC++头文件(预处理文件)已经过预处理的C++原始程序未经预处理的C++源程序已经过预处理的C原始程序未经过预处理C源程序.S.s.H.hh.h.ii.cc.cp.cpp.CPP.c++.C.cxx.i.c动态链接库文件(sharedobject)‏.so静态链接库文件(archivefile)‏.a目标文件.oGCC选项使用方法:gcc[options][filename]基本选项:-E:只对源程序进行预处理‏-S:只对源程序进行预处理、编译-c:执行预处理、编译、汇编而不链接-ooutput_file:指定输出文件名-g:产生调试工具必需的符号信息-O/On:在程序编译、链接过程中进行优化处理-Wall:显示所有的警告信息-Idir:指定额外的头文件搜索路径-Ldir:指定额外的库文件搜索路径-lname:链接时搜索指定的库文件-DMACRO=DEFN:定义MACRO宏-fpic:输出的对象模块式按照可重定位地址(relocatableaddressing)方式生成的-shared:创建共享库示例1test.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目录或$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.$./test注意:运行时动态链接GDBGDB:GNUDebug,调试gcc编译的程序设置断点监视变量值单步执行修改变量值编译时要带-g属性,如gcc–ghello.c–ohellogdb运行要调试的程序GDB命令不退出gdb就执行makemake不退出gdb就执行shell命令shell中止正在调试的程序kill执行当前调试的程序run退出gdbquit临时显示表达式的值print显示表达式的值display打开要调试的文件file执行一条语句,是函数则进入函数内部step执行一条语句但不进入函数内部next列出源代码的一部分list设置断点,可以是行号、函数名及地址tbreak设置临时断点‏break/tbreakwatch监视一个变量的值而不管它何时被改变make与makefilemulti-fileprojectIDEmakemake&makefilemakefile描述模块间的依赖关系make命令根据makefile对程序进行管理和维护make判断被维护文件的时序关系makefile的命名GNUmakefilemakefileMakefile当make寻找makefile文件时,它试图搜寻具有如下的名字的文件,按顺序:GNUmakefile,makefile,Makefilemakefile 模板 个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载 一个简单的Makefile文件包含一系列的“ 规则 编码规则下载淘宝规则下载天猫规则下载麻将竞赛规则pdf麻将竞赛规则pdf ”,其样式如下:目标(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-ffilenameGNU的make的工作过程如下:依次读入各makefile文件初始化文件中的变量分析所有规则为所有的目标文件创建依赖关系链根据依赖关系和时间数据,确定哪些目标文件要重新生成执行相应的生成命令示例1HelloWorld小程序的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示例3makefile扩展makefile扩展变量——用户定义变量、环境变量、自动变量或预定义变量隐式规则条件语句嵌套…Using"infomake"用户自定义变量定义变量的一般格式是:<变量名>=<字符串>引用变量:$(变量名)示例3中定义成变量OBJECTS=main.okbd.ocommand.odisplay.o\insert.osearch.ofiles.outils.o改进后的makefile自动变量自动变量——make中定义了一些它们的值会因环境的不同而发生改变的变量$@表示规则中的目标文件集合$?所有比目标文件还新的那些相依文件的集合,以空格分开$<规则中的第一个依赖文件的名称$^规则中所有不重复的依赖文件的集合,以空格分开$%仅当目标文件是一个静态库成员时,表示规则中的目标成员名,而此时$@表示相应库文件的名称$*如果目标文件的后缀是make所识别的,则$*就是去掉后缀的目标文件名,但该引用只有用在隐含规则中才有意义预定义变量归档库:ARARFLAGS汇编命令:ASASFLAGSC编译命令:CCCPPCFLAGSCPPFLAGSC++编译命令:CXXCXXFLAGS例:隐式规则在makefile文件中明确地指定了一些规则,称为显式规则隐式规则就是一种惯例,即预先约定好了,不需要在makefile文件中写出来的规则几个常用的隐式规则:make自动推导具有多个目标的规则伪目标跳过搜索依赖示例3可简化为:示例3还可简化为示例4Linux-0.11的Makefile层次化Review系统调用和库函数gccgdbmake
本文档为【Linux下C编程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
中小学教育资料大全
暂无简介~
格式:ppt
大小:472KB
软件:PowerPoint
页数:59
分类:金融/投资/证券
上传时间:2023-02-19
浏览量:0