Linux操作系统12-开发_第1页
Linux操作系统12-开发_第2页
Linux操作系统12-开发_第3页
Linux操作系统12-开发_第4页
Linux操作系统12-开发_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

1、Acegene IT Co. Ltd.1Linux操作系统操作系统开发开发Acegene IT Co. Ltd.2内容提要内容提要 使用gcc 使用Gnus make管理项目 使用autoconf创建自配置软件 比较和归并源文件 使用RCS进行版本控制Acegene IT Co. Ltd.3一、使用一、使用gcc 1 gcc特性 2 使用简介 3 常用命令行选项Acegene IT Co. Ltd.41 gcc特性特性 编译过程预处理、编译、链接 支持风格ANSI C、C+、Objective C 调试信息能够在生成调试信息同时进行优化 交叉编译 大量扩展(降低可移植性)Acegene IT

2、Co. Ltd.52 使用简介使用简介 #include int main(void) fprintf(stdout,”Hello World!n”); return 0; gcc hello.c o hello ./helloAcegene IT Co. Ltd.62 使用简介使用简介 过程:cpp预处理所有的宏、展开头文件编译为目标代码使用ld链接成二进制文件 gcc -E hello.c -o hello.cpp gcc -x cpp-output -c hello.cpp hello.o gcc hello.o -o hello gcc test2.c test.c -o testAc

3、egene IT Co. Ltd.72 使用简介使用简介 常用扩展名解释 .c c语言源代码 .C,.cc c+源代码 .i 预处理后的c源代码 .ii 预处理后的c+源代码 .S,.s 汇编语言源代码 .o 汇编后的目标代码 .a,.so 库代码Acegene IT Co. Ltd.83 常用命令行选项常用命令行选项 -o FILE 指定输出文件名,未指定a.out -c 只编译,不链接 -DFOO=BAR 定义预处理宏 -IDIR 将DIR指定的目录添加到头文件搜索路径中 -LDIR 将DIR加入到库文件的搜索目录列表中,缺省情况下gcc只链接共享库 -static 链接静态库 -lFOO

4、 链接名为FOO的函数库,如-lmathAcegene IT Co. Ltd.93 常用命令行选项常用命令行选项 -g 在可执行文件中包含调试信息 -ggdb 在可执行程序中包含只有GNU debugger才能识别的大量调试信息 -p 加入prof能够识别的统计信息 -ON 编译时进行优化(N为优化级别) -w 关闭所有警告 -Wall 发出所有gcc能提供的警告 -werror 将警告转化为错误,中止编译 -v 显示每一步详细信息Acegene IT Co. Ltd.10二、使用二、使用Gnus make管理项目管理项目 为何使用make 编写makefile 深入了解makefile 额外

5、的make命令行选项 调试make 常见错误 常用的makefile目标Acegene IT Co. Ltd.111为何使用为何使用make 包含多个源文件的项目在编译时有长而复杂的命令行,可以通过makefile保存这些命令行来简化该工作 make可以减少重新编译所需要的时间,因为make可以识别出哪些文件是新修改的 Make维护了当前项目中各文件的相关关系,从而可以在编译前检查是否可以找到所有的文件Acegene IT Co. Ltd.122 编写编写makefile makefile:一个文本形式的文件,其中包含一些规则告诉make编译哪些文件以及怎样编译这些文件,每条规则包含以下内容:

6、一个target,即最终创建的东西一个和多个dependencies列表,通常是编译目标文件所需要的其他文件需要执行的一系列commands,用于从指定的相关文件创建目标文件Acegene IT Co. Ltd.132 编写编写makefile make执行时按顺序查找名为GNUmakefile,makefile或者Makefile文件,通常,大多数人常用Makefile Makefile规则: target: dependency dependency .commandcommand. 注意:command前面必须是制表符Acegene IT Co. Ltd.142 编写编写makefile

7、 例子:editor: editor.o screen.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 *.oAcegene IT Co. Ltd.153 深入了解深入了解makefile 伪目标

8、:如上例中的clean 变量:声明 VARNAME=sometext .使用 $(VARNAME)递归展开变量,如TOPDIR=/home/young, SRCDIR=$(TOPDIR)/src,则SRCDIR=/home/young/src make可以检测到错误的递归展开,如CC = gcc CC=$(CC) o 解决方案 CC:=gcc -o CC+= -O2Acegene IT Co. Ltd.16例子例子 OBJS = editor.o screen.o keyboard.o HDRS = editor.h screen.h keyboard.h editor: $(OBJS)gcc

9、 -o editor $(OBJS) editor.o : editor.c $(HDRS)gcc -c editor.c screen.o: screen.c screen.hgcc -c screen.c keyboard.o : keyboard.c keyboard.hgcc -c keyboard.c clean:rm editor $(OBJS)Acegene IT Co. Ltd.173 深入了解深入了解makefile 环境变量:make会自动读取环境变量并使用 自动变量: $ 规则的目标对应的文件名 $ 规则中的第一个相关文件名 $ 规则中的所有相关文件的列表 $? 规则中日

10、期新于目标的所有相关文件的列表 $(D) 目标文件的目录部分(如果目标在子目录中) $(F) 目标文件的文件名部分Acegene IT Co. Ltd.183 深入了解深入了解makefile 预定义变量: AR 归档维护程序 ar AS 汇编程序 as CC C编译程序 cc CPP C预处理程序 cpp RM 文件删除程序 rm f ARFLAGS ASFLAGS CPPFLAGS LDFLAGS Acegene IT Co. Ltd.193 深入了解深入了解makefile 隐式规则OBJS = editor.o screen.o keyboard.oeditor: $(OBJS)gcc

11、 -o editor $(OBJS) clean:rm editor $(OBJS) 模式规则%.o:%.c$(CC) -c $(CFLAGS) $(CPPFLAGS) $ sigrot.patch diff -u sigrot.1 sigrot.2 sigrot.patch 使用-r参数来遍历目录 patch -p0 sigrot.patch p0 表示指定使用补丁前补丁中所包含的文件名中需要剥离的”/”的重数,-p则剥离了除最终文件名之外的所有部分。 恢复:patch -p0 -R Merged_fileAcegene IT Co. Ltd.43基本用法基本用法 rcs 用于两种情形: 如

12、果以只读方式取出文件后做修改,并且想保存结果,此时可以使用rcs -l Filename,取出该文件,并加锁,同时不覆盖现有的同名文件。 如果需要打开其他人对文件的加锁,可以使用rcs -u filename,此时文件被解锁,并且原来的加锁者将受到一条解释信息。 此外:rcs -mrev:msg可以修改某个版本的描述信息Acegene IT Co. Ltd.44基本用法基本用法 rcsclean 清除RCS文件,基本用法为rcsclean options file1 file2 不加任何选项的rcsclean删除哪些在取出后没有更改的工作文件 -u 选项可以先解锁所有已经加锁的文件,然后再删除

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

14、者的登陆名 $Name$ 用于取回该版本的符号名 $RCSfile$ 不包含路径的RCS文件名 $Revision$ 该版本的版本号 $Source$ RCS文件的全路径名 $State$ 版本的状态:Exp(试验版本)、Stab(稳定版本)、Rel(发行版本),缺省为ExpAcegene IT Co. Ltd.47ABI Compatibility What is Application Binary InterfaceRuntime compatibility mechanismAllows for an upgrade option on components so long as th

15、e “binary” interface is maintainedIf “binary” interface changed then ABI is said to have “changed” losing compatibilityAcegene IT Co. Ltd.48ABI Illustration#define ARRAY_SIZE 8struct my_struct int arrayARRAY_SIZE;init_struct( struct my_struct *p ) memset( p, 0, sizeof(struct mystruct);Acegene IT Co.

16、 Ltd.49Glibc Compatibility Usually only affected by 2nd-digit changee.g., glibc-2.1 glibc-2.2 Symbols are versioned to provide executable binary compatibility Does NOT provide link time compatibilityMust link against the same version of glibc that objects were compiled againstSince Oracle links at t

17、he customer site, we get around this by using glibc stubs for linkingAcegene IT Co. Ltd.50Gcc C+ Compatibility C+ ABI 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.2 compatibility package ?Acegene

18、IT Co. Ltd.51Current Architectures These are the CPUs that can run Linux today: List all CPUs one would need to build for if wanted to send a product on all types of CPUs.IBM s/390, IA32Building for i386 covers most bases w/o optimizationsAcegene IT Co. Ltd.52Debugging your code Spinning process? Oracle shadow? Attach to process using gdb debugg

温馨提示

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

评论

0/150

提交评论