第四讲LINUX系统的C编程.ppt
《第四讲LINUX系统的C编程.ppt》由会员分享,可在线阅读,更多相关《第四讲LINUX系统的C编程.ppt(69页珍藏版)》请在三一文库上搜索。
1、第四讲 Linux系统的C编程,主要内容,编译器及工作过程 链接器与库文件 静态库的构造及使用 共享库的构造及使用 make命令与Makefile 调试器与程序调试 其它编程工具简介,第四讲 Linux系统的C编程,4.1 编译器 4.2头文件 4.3链接器与库文件 4.4 静态库 4.5 共享库 4.6 make与Makefile 4.7 调试器gdb 4.8 UNIX/Linux其它编程工具简介,4.1 编译器,4.1.1 功能及用法 4.1.2 参数及说明 4.1.3 示例 4.1.4 gcc的工作过程,4.1.1 功能及用法,1.为什么要使用编译器? C语言源程序需要经过编译和链接这两
2、个过程才能转换成二进制可执行程序。 一般在Unix系统中使用的C编译器是cc(C Compiler的缩写)。在各个Linux发行版本中广泛使用的C编译器名为gcc(GNU cc)。,2.功能 gcc能将C/C+源程序和目标程序编译并调用链接程序ld生成可执行文件,如果用户没有给出可执行文件的名字,gcc将默认生成一个名为a.out的可执行文件。,4.1.1 功能及用法,3.用法 gcc的一般用法为: gcc options 其常用格式为: gcc -c-S-E-s-g-static-shared-rdynamic -Idir -Ldir -lmylib-x Language-Olevel -D
3、macro=defn -Umacro-mmachine-option -o out_file infile ,几点说明,gcc根据源程序的后缀名来决定使用哪一种语言的编译器进行编译工作。 后缀名为“.c”(小写)的文件被gcc认为是C语言的源程序文件。例如:gcc hello.c gcc编译出来的可执行程序默认是a.out。,几点说明(续),g+是一个C+版本的gcc编译器。 g+要求C+语言源程序文件带有后缀名“.cc”。例如:g+ hello.cc,4.1.2 参数及说明,4.1.2 参数及说明(续),4.1.3 示例,C程序 设有一个文件名为hello.c的程序,其内容为:,执行步骤,编
4、译 可按以下方法进行编译,以生成相应的结果: gcc hello.c #生成可执行程序a.out 或 gcc o hello hello.c #生成可执行程序hello 运行 编译生成可执行文件之后,就可以运行了,方法为: ./a.out 或 ./hello 输出结果 Hello World!,2. c+程序 下面是一个c+版的Hello World程序,其文件名为hello.C,内容为:,编译方法,使用c+或g+来编译: g+ hello.C #生成可执行程序a.out c+ o hello hell.C #生成可执行程序hello g+ s -o Hello hello.C #生成删除符号
5、表的可执行程序Hello 或使用gcc并指定库文件来编译c+程序: gcc c hello.C #生成目标文件hello.o gcc o h hello.C lstdc+#指定标准c+库,生成可执行程序h,4.1.4 gcc的工作过程,使用gcc/g+由C源代码文件生成可执行文件的过程,有以下四个阶段 预处理(也称预编译,Preprocessing) 编译(Compilation) 汇编(Assembly) 链接(Linking),4.2 头文件,在标准C中有两种形式的头文件使用方式: #include #include “headfile.h” 区别: #include 型头文件搜索范围为默
6、认位置/usr/include, #include“headfile.h”型头文件的搜索位置为当前目录,在Linux的GNU C中,若当前目标不存在headfile.h,则也会到默认位置去搜索。,4.3 链接器与库文件,UNIX/Linux的链接器为ld,其功能是将目标文件或库文件链接在一起,生成可执行文件,一般在编译过程的最后执行。 Linux标准库文件一般存放在目录/lib或/usr/lib。默认情况下链接器查找C语言的标准库函数。如果使用的不是标准的库函数,必须通过-llib或-Llibdir告诉链接器ld,否则将无法找到库函数。,库文件命名必须遵守一定命名规则,库文件名字必须永远以li
7、b开头,后紧跟库类名,文件名的后缀为 .a:传统静态库 .so:共享库或动态链接库 例如,libc.a为标准C库,libm.a为数学运算静态库, libc.so.6 和libm.so.6分别为标准C和数学运算共享库。,4.4 静态库,静态库也叫档案(archive),以.a为后缀,用于编译链接后生成静态可执行文件。用户可以使用库管理程序ar和ranlib来创建和管理自己的或已有的静态库。,4.4.1 引例 设有C语言文件f1.c,f2.c,f3.c,它们的内容分别为:,/文件f1.c的内容 f1(int arg) printf(”F1: you passed: %dn”,arg); /文件f2
8、.c的内容: f2(char *arg) printf(”F2: you passed: %sn”,arg); /文件f3.c的内容: #include ,main() fprintf(stderr, ”Begin:n”); f1(15); f2(”Hello World!”); fprintf(stderr,”:Endn”); exit(0); ,可以采用各模块文件分别编译然后再统一链接的办法进行编译。 cc c f1.c f2.c /生成f1.o和f2.o cc o f f3.c f1.o f2.o /生成f cc o fp f3.c f1.c f2.c /生成fp,4.4.2 构造和管理
9、静态库,用户可以使用命令ar构造自己的静态库: cc c f1.c f2.c /生成目标文件f1.o和f2.o ar crv libmyl.a f1.o f2.o /生成库libmyl.a ranlib libmyl.a /为子函数建立索引表,说明,ar用于静态库文件的管理,其功能是库创建、修改和从库中取出模块等 ranlib用于为刚建立的库文件建立索引表,通过索引表可以加快库文件搜索速度。其用法为: ranlib -vV ar_file,4.4.3 使用自己的库,当用户创建自己的静态库之后,就可以按照使用系统库的方法来使用它。例如: cc o fp f3.c libmyl.a #使用库lib
10、myl.a和f3.c生成可执行程序fp cc o fp f3.o libmyl.a #使用库libmyl.a和f3.o生成可执行程序fp cc o fp f3.c -L. lmyl #-L指定当前目录,-lmyl指定静态库文件libmyl.a,4.5 共享库,Linux系统的另一种库文件为共享库,用于生成动态链接的可执行程序。 共享库文件名的格式为: libNAME.so.N NAME为库名,N为版本号。 可用命令ldd和ldconfig命令管理共享库。,4.5.1 构造共享库,Linux的共享库用于生成动态链接的可执行程序。 共享库文件名的格式为: libNAME.so.N NAME为库名,
11、N为版本号。 常用命令ldd和ldconfig命令管理共享库。,4.5.1 构造共享库,共享库构造非常简单,只需要在构造库的时候使用-shared参数就可以了。 例如:用4.4.1引例中的f1.c和f2.c构造共享库,方法是: cc -c f1.c f2.c /生成目标文件 cc -shared -o libmy.so f1.o f2.o /由目标文件生成共享库 或cc -shared o libmy.so c f1.c f2.c /由源文件生成共享库,4.5.2 共享库的使用,共享库要使用头文件dlfcn.h和几个相关的函数:dlerror,dlopen,dlsym和dlclose。 1.
12、dlopen dlopen用于打开指定共享库,并返回文件描述符。 其原型为: void *dlopen(const char *filename, int flag); dlopen调用失败时返回NULL值,否则返回文件描述符。,Dlopen函数的相关说明,变量filename为共享库名。若文件名不以/开头,则为非绝对路径名,将按以下顺序搜索库文件: (1)环境变量中的LD_LIBRARY_PATH值指定的路径; (2)动态链接缓冲文件/etc/ld.so.cache; (3)库文件默认目录/lib,/usr/lib。,Dlopen函数的相关说明,变量flag用来表示在什么时候解决未定义的符号
13、,其取值范围与意义如下 (1)RTLD_LAZY:指定在动态链接库的函数执行时解决; (2)RTLD_NOW:指定在dlopen返回前就解决所有未定义的符号问题。一旦有未解决好未定义的符号,dlopen将返回NULL表示错误。 注意:RTLD_LAZY和RTLD_NOW可以与RTLD_GLOBAL配合使用,使得那些在以后才加载的库可以获得其中的符号。,2. dlsym dlsym用于返回共享中指定函数的入口地址 其原型为: void *dlsym(void *handle, char *symbol); dlsym根据共享库文件描述符(handle)与符号(symbol),返回symbol对应
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 LINUX 系统 编程
链接地址:https://www.31doc.com/p-3135145.html