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