《Linux下C语言开发工具.ppt》由会员分享,可在线阅读,更多相关《Linux下C语言开发工具.ppt(37页珍藏版)》请在三一办公上搜索。
1、2023/11/8,1,Linux高级程序设计(第二版),人民邮电出版社出版杨宗德编著2009年9月,2023/11/8,2,第2章Linux下C语言开发工具,1,2,常用编辑工具,GCC编译工具,3,Make工具与Makefile文件,4,常用调试工具,5,Linux库文件使用与创建,6,Autoconf/Automake自动化工具,2023/11/8,3,VIM编辑器,2023/11/8,4,配置文件,VIM的配置文件为“/.vimrc”cp/usr/share/vim/vim61/vimrc_example/.vimrc添加内容到配置文件/.vimrc中,2023/11/8,5,Sour
2、ce Insight工具,Source Insight是一个图形化的源代码查看工具(当然也可以做为编辑工具),如果一个项目的源代码较多,此工具可以很方便的查找出源代码之间的依赖关系,例如,某一个宏的定义位置,某一个自定义的数据类型的原始定义。应用编程所用的头文件(主要位于/usr/include目录下)下载到Windows平台,从而建立各文件间的关联,以便查找各函数声明,变量类型。,2023/11/8,6,第2章Linux下C语言开发工具,1,2,常用编辑工具,GCC编译工具,3,Make工具与Makefile文件,4,常用调试工具,5,Linux库文件使用与创建,6,Autoconf/Aut
3、omake自动化工具,2023/11/8,7,编译C到可执行文件过程,(1)预处理(也称预编译,Preprocessing):命令GCC首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含、预编译语句进行分析,使用-E参数。(2)编译(Compilation):调用cc进行编译,这个阶段根据输入文件生成以.s为后缀的汇编文件,使用-s参数。(3)汇编(Assembly):汇编过程是针对汇编语言的步骤,调用as进行工作,将.S和.s为后缀的汇编语言文件经过预编译和汇编成以.o为后缀的目标文件,使用-c参数。(4)连接(Linking):当所有的目标文件都生成之后,调用ld来完成最后
4、的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排到可执行程序中恰当的位置上,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方,使用-o参数。,2023/11/8,8,不同后缀所标识的程序语言及处理,2023/11/8,9,其它常用选项,-o output_filename:把文件输出到output_filename,这个名称不能和源文件同名。如果不给文件名,GCC就将文件输出到a.out。-g:产生符号调试工具(GNU的Gdb)所必要的标准调试信息,要想对源代码进行调试,就必须加入这个选项。-O:对程序进行优化编译、连接。采用这个选项,整个源代码会在编译、连接过
5、程中进行优化处理,这样可以提高可执行文件的执行效率,但是,编译、连接的速度就相应地要慢一些。-O2:比-O的优化级别更高,能更好的优化编译、连接。但整个编译、连接过程会更长。-I dirname:在头文件的搜索路径列表中添加dirname目录,是在预编译过程中使用的选项。-L dirname:在库文件的搜索路径列表中添加dirname目录。,2023/11/8,10,头文件搜索路径,2023/11/8,11,第2章Linux下C语言开发工具,1,2,常用编辑工具,GCC编译工具,3,Make工具与Makefile文件,4,常用调试工具,5,Linux库文件使用与创建,6,Autoconf/Au
6、tomake自动化工具,2023/11/8,12,Makefile优点,利用Make工具,可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序而言,使用make工具和makefile文件可以清晰地理顺各个源文件之间的关系。,2023/11/8,13,Makefile示例,2023/11/8,14,第2章Linux下C语言开发工具,1,2,常用编辑工具,GCC编译工具,3,Make工具与Makefile文件,4,常用调试工具,5,Linux库文件使用与创建,6,Autoconf/Automake自动化工具,2023/11/8,15,GDB调试工具,完成如下的调试任
7、务:(1)设置断点。(2)监视程序变量的值。(3)程序的单步执行。(4)修改变量的值。,2023/11/8,16,GDB可用命令,2023/11/8,17,GDB示例,见教材。,2023/11/8,18,strace,strace用来跟踪一个进程的系统调用或信号产生的情况,而ltrace用来跟踪进程调用库函数的情况。常用的三个命令行参数:-f:除了跟踪当前进程外,还跟踪其子进程。-o file:将输出信息写到文件file中,而不是显示到标准错误输出(stderr)。-p pid:绑定到一个由pid对应的正在运行的进程。此参数常用来调试后台进程。,2023/11/8,19,第2章Linux下C语
8、言开发工具,1,2,常用编辑工具,GCC编译工具,3,Make工具与Makefile文件,4,常用调试工具,5,Linux库文件使用与创建,6,Autoconf/Automake自动化工具,2023/11/8,20,Linux库文件管理方式,静态库。在Linux中,以.a为后缀,如libtest.a。应用程序从静态库中直接拷贝函数到二进制映像文件。共享库,在Linux操作系统中,以libxxx.so.x.x为格式命名。可执行文件在运行时将函数代码从共享库文件中读出,从而间接引用。,2023/11/8,21,库函数基本路径,/lib:系统必备共享库/usr/lib:标准共享库和静态库/usr/l
9、ocal/lib:本地函数库,2023/11/8,22,库文件搜索顺序,(1)首先在“LD_LIBRARY_PATH”环境变量所设置的路径下查找(一般都没有给此环境变量赋值);(2)搜索动态装载器在/etc目录下的缓存文件/etc/ld.so.cache(此文件由命令ldconfig创建更新)。(在Redhat 9中,直接由/etc/ld.so.conf文件配置)。因此,如果要使用自己创建的共享库文件(静态库直接在编译时指定即可),则需要将共享库拷贝到想要搜索路径下或者指定该库的具体路径。,2023/11/8,23,ldd命令-查看到某可执行程序库清单,2023/11/8,24,创建静态库,源
10、文件信息。其中,“libhello.c”为要构建的库文件源文件,“libhello.h”为调用此库文件的头文件,“usehello.c”为测试程序。生成目标文件 使用ar命令创建静态库,2023/11/8,25,使用静态库,头文件 和库文件信息,2023/11/8,26,使用此库文件,应用示例 编译 运行,2023/11/8,27,共享库创建,2023/11/8,28,共享库创建示例,查看源文件,“libhello.c”为要构建的库文件源文件,“libhello.h”为调用此库文件的头文件,“usehello.c”为测试程序。,2023/11/8,29,构建共享库目标文件,2023/11/8,
11、30,编译共享库并创建连接,2023/11/8,31,使用共享库,准备文件头文件libhello.h:以知道有哪些函数,完成怎么样的功能,返回值以及参数情况。库文件libhello.so.1.0及其链接libhello.so:库函数的二进制代码位置,2023/11/8,32,文件内容,2023/11/8,33,编译连接,2023/11/8,34,运行,如果希望在使用连接器时不使用-Ldirectory标识就可以查找到该库,则可以采用以下方式之一:把此库拷贝到/usr/lib或者/lib文件夹中,或者在此两个文件夹任意一个中创建一个到该库的快捷方式,并命名为libname.so。如果库所在路径没有在/usr/lib和/lib文件夹下,需要将该路径添加到文件“/etc/ld.so.conf”中,每一行增加一个路径,完成以上设置后,然后运行ldconfig命令更新库信息。,2023/11/8,35,第2章Linux下C语言开发工具,1,2,常用编辑工具,GCC编译工具,3,Make工具与Makefile文件,4,常用调试工具,5,Linux库文件使用与创建,6,Autoconf/Automake自动化工具,2023/11/8,36,自动创建Makefile文件流程,2023/11/8,37,示例,见教材。,
链接地址:https://www.31ppt.com/p-6511151.html