Linux操作系统12开发

上传人:仙*** 文档编号:220581194 上传时间:2023-07-01 格式:PPT 页数:54 大小:363.47KB
收藏 版权申诉 举报 下载
Linux操作系统12开发_第1页
第1页 / 共54页
Linux操作系统12开发_第2页
第2页 / 共54页
Linux操作系统12开发_第3页
第3页 / 共54页
资源描述:

《Linux操作系统12开发》由会员分享,可在线阅读,更多相关《Linux操作系统12开发(54页珍藏版)》请在装配图网上搜索。

1、Linux操作系统操作系统开发开发周炯周炯上海艾基信息技术有限公司上海艾基信息技术有限公司1内容提要内容提要使用gcc使用Gnus make管理项目使用autoconf创建自配置软件比较和归并源文件使用RCS进行版本控制2一、使用一、使用gcc1 gcc特性2 使用简介3 常用命令行选项31 gcc特性特性编译过程预处理、编译、链接支持风格ANSI C、C+、Objective C调试信息能够在生成调试信息同时进行优化交叉编译大量扩展(降低可移植性)42 使用简介使用简介#include int main(void)fprintf(stdout,”Hello World!n”);return

2、0;gcc hello.c o hello./hello52 使用简介使用简介过程:cpp预处理所有的宏、展开头文件编译为目标代码使用ld链接成二进制文件gcc-E hello.c-o hello.cppgcc-x cpp-output-c hello.cpp hello.ogcc hello.o-o hellogcc test2.c test.c-o test62 使用简介使用简介常用扩展名解释.c c语言源代码.C,.cc c+源代码.i 预处理后的c源代码.ii 预处理后的c+源代码.S,.s 汇编语言源代码.o 汇编后的目标代码.a,.so 库代码73 常用命令行选项常用命令行选项-o

3、 FILE 指定输出文件名,未指定a.out-c 只编译,不链接-DFOO=BAR 定义预处理宏-IDIR 将DIR指定的目录添加到头文件搜索路径中-LDIR 将DIR加入到库文件的搜索目录列表中,缺省情况下gcc只链接共享库-static 链接静态库-lFOO 链接名为FOO的函数库,如-lmath83 常用命令行选项常用命令行选项-g 在可执行文件中包含调试信息-ggdb 在可执行程序中包含只有GNU debugger才能识别的大量调试信息-p 加入prof能够识别的统计信息-ON 编译时进行优化(N为优化级别)-w 关闭所有警告-Wall 发出所有gcc能提供的警告-werror 将警告

4、转化为错误,中止编译-v 显示每一步详细信息9二、使用二、使用Gnus make管理项目管理项目为何使用make编写makefile深入了解makefile额外的make命令行选项调试make常见错误常用的makefile目标101为何使用为何使用make包含多个源文件的项目在编译时有长而复杂的命令行,可以通过makefile保存这些命令行来简化该工作make可以减少重新编译所需要的时间,因为make可以识别出哪些文件是新修改的Make维护了当前项目中各文件的相关关系,从而可以在编译前检查是否可以找到所有的文件112 编写编写makefilemakefile:一个文本形式的文件,其中包含一些规

5、则告诉make编译哪些文件以及怎样编译这些文件,每条规则包含以下内容:一个target,即最终创建的东西一个和多个dependencies列表,通常是编译目标文件所需要的其他文件需要执行的一系列commands,用于从指定的相关文件创建目标文件122 编写编写makefilemake执行时按顺序查找名为GNUmakefile,makefile或者Makefile文件,通常,大多数人常用MakefileMakefile规则:target:dependency mandcommand.注意:command前面必须是制表符132 编写编写makefile例子:editor:editor.o scre

6、en.o keyboard.ogcc-o editor editor.o screen.o keyboard.oeditor.o:editor.c editor.h keyboard.h screen.hgcc-c editor.cscreen.o:screen.c screen.hgcc-c screen.ckeyboard.o:keyboard.c keyboard.hgcc-c keyboard.cclean:rm editor*.o143 深入了解深入了解makefile伪目标:如上例中的clean变量:声明 VARNAME=sometext.使用$(VARNAME)递归展开变量,如T

7、OPDIR=/home/young,SRCDIR=$(TOPDIR)/src,则SRCDIR=/home/young/srcmake可以检测到错误的递归展开,如CC=gcc CC=$(CC)o解决方案 CC:=gcc-o CC+=-O215例子例子OBJS=editor.o screen.o keyboard.oHDRS=editor.h screen.h keyboard.heditor:$(OBJS)gcc-o editor$(OBJS)editor.o:editor.c$(HDRS)gcc-c editor.cscreen.o:screen.c screen.hgcc-c screen.

8、ckeyboard.o:keyboard.c keyboard.hgcc-c keyboard.cclean:rm editor$(OBJS)163 深入了解深入了解makefile环境变量:make会自动读取环境变量并使用自动变量:$规则的目标对应的文件名$规则中的第一个相关文件名$规则中的所有相关文件的列表$?规则中日期新于目标的所有相关文件的列表$(D)目标文件的目录部分(如果目标在子目录中)$(F)目标文件的文件名部分173 深入了解深入了解makefile预定义变量:AR 归档维护程序 arAS 汇编程序 asCC C编译程序 ccCPP C预处理程序 cppRM 文件删除程序 rm

9、 fARFLAGS ASFLAGS CPPFLAGS LDFLAGS 183 深入了解深入了解makefile隐式规则OBJS=editor.o screen.o keyboard.oeditor:$(OBJS)gcc-o editor$(OBJS)clean:rm editor$(OBJS)模式规则%.o:%.c$(CC)-c$(CFLAGS)$(CPPFLAGS)$sigrot.patchdiff-u sigrot.1 sigrot.2 sigrot.patch使用-r参数来遍历目录patch-p0 sigrot.patchp0 表示指定使用补丁前补丁中所包含的文件名中需要剥离的”/”的重

10、数,-p则剥离了除最终文件名之外的所有部分。恢复:patch-p0-R Merged_file42基本用法基本用法rcs 用于两种情形:如果以只读方式取出文件后做修改,并且想保存结果,此时可以使用rcs-l Filename,取出该文件,并加锁,同时不覆盖现有的同名文件。如果需要打开其他人对文件的加锁,可以使用rcs-u filename,此时文件被解锁,并且原来的加锁者将受到一条解释信息。此外:rcs-mrev:msg可以修改某个版本的描述信息43基本用法基本用法rcsclean 清除RCS文件,基本用法为rcsclean options file1 file2 不加任何选项的rcsclea

11、n删除哪些在取出后没有更改的工作文件-u 选项可以先解锁所有已经加锁的文件,然后再删除没有更改的那些工作文件。使用-rM.N可以删除指定的版本,例如:rcsclean r2.3 howdy.c将删除howdy.c的2.3版44RCS关键字关键字$Id$Log$日志消息,RCS是在先前的日志消息上面插入新的消息,而不是用最新的消息取代以前的消息$Author$存入该版本的用户登录名$Date$该版本存入的日期和时间,使用UTC格式$Header$RCS文件的全路径名,版本号,日期,时间,作者,状态,加锁者(在文件被加锁的情形下)45RCS关键字关键字$Locker$锁定该版本的使用者的登陆名$N

12、ame$用于取回该版本的符号名$RCSfile$不包含路径的RCS文件名$Revision$该版本的版本号$Source$RCS文件的全路径名$State$版本的状态:Exp(试验版本)、Stab(稳定版本)、Rel(发行版本),缺省为Exp46ABI CompatibilityWhat is Application Binary InterfaceRuntime compatibility mechanismAllows for an upgrade option on components so long as the“binary”interface is maintainedIf“bi

13、nary”interface changed then ABI is said to have“changed”losing compatibility47ABI Illustration#define ARRAY_SIZE 8struct my_struct int arrayARRAY_SIZE;init_struct(struct my_struct*p)memset(p,0,sizeof(struct mystruct);48Glibc CompatibilityUsually only affected by 2nd-digit changee.g.,glibc-2.1 glibc-

14、2.2Symbols are versioned to provide executable binary compatibilityDoes NOT provide link time compatibilityMust link against the same version of glibc that objects were compiled againstSince Oracle links at the customer site,we get around this by using glibc stubs for linking49Gcc C+CompatibilityC+A

15、BI has changed between 2.96 and 3.2C+on Linux now closer to ISO standardC+programs built with gcc-2.96 will not run with runtime libraries from gcc-3.2compatibility package?50Current ArchitecturesThese are the CPUs that can run Linux today:List all CPUs one would need to build for if wanted to send

16、a product on all types of CPUs.IBM s/390,IA32Building for i386 covers most bases w/o optimizations51Debugging your codeSpinning process?Oracle shadow?Attach to process using gdb debugger:$gdb-pid 8520 which oracleGDB is free software,covered by the GNU General PublicAttaching to program:oracle,proce

17、ss 8520(gdb)where0 x40550104 in 0#semop()0 x0981aae9 in sskgpwwait()1#Wait on Semaphore ()0 x0822ed45 in kslwait 6#0 x084fbaf0 in kjudbm()7#Mount Instance(gdb)detach52Profiling your codeIs your code doing what you think it should?To find out or learn more on 3rd party tools,use oprofile,a freeware runtime profiling toolWorks on UL but not on RHEL 2.1ASIntel compiler:vtune53AQ&Q U E S T I O N SA N S W E R S

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!