首页
搜索资源
资源分类
资源描述
Linux环境及开发工具应用实践环境及开发工具应用实践-Linux开发工具开发工具1Company name目录目录1.常用编译工具常用编译工具2.常用调试工具常用调试工具Company name常用程序编译工具常用程序编译工具v常用的程序编译工具有:v gcc、g+、egcs、pgcc、calls、cproto、indent、gprof、f2c、p2c Company namegccvgcc(GNU C编译器)v 是一个在UNIX或Linux系统上运行的、功能确定的编译器,主要用于对C/C+/Object C语言的编译。vGcc 是Linux开发的基础,名称是:GNU C Compiler 或者GNU Compiler Collectionv 键入:gcc v可以显示目前使用的gcc的版本 Company namegccv Company namegccv 说明:i386表明现在使用的gcc是为386的微处理器而设计的。glibc21指定发行的系统版本。Linux指所支持的可执行文件格式。v gcc支持多个平台,可以在安装时指定gcc编译后程序运行的平台,gcc将针对指定平台生成特定的程序。v Make命令后面再加上configuetarget=i386-glibc-2.1-linuxhost=XXX on platform XXX,就可以安装面向不同目标平台的gcc。Company namegccv gcc的调用格式:v$gcc options filenamesv其中,filenames是所要编译的程序源文件。v当调用gcc时,gcc会完成预处理、编译、汇编和链接。v前三步分别生成目标文件,链接时,把生成的目标文件链接成可执行文件。Company namegccv gcc支持不同的源程序文件进行不同处理。文件格式文件含义文件格式文件含义 file.c需预处理的C语言程序 file.cc必须被预处理的C+源程序 file.i不需预处理的C语言程序 file.cxx必须被预处理的C+源程序 file.ii不需预处理的C语言程序 file.cpp必须被预处理的C+源程序 file.hC语言头文件,需编译和链接 file.s(S)汇编代码Company namegccv当不用任何选项编译一个程序时,gcc将会生成一个名为a.out的可执行文件。v可以使用-o编译选项为产生的可执行文件指定一个文件名代替a.out。v注意:当使用-o选项时,-o后面必须跟上一个文件名。v例如:文件examplehello.cv Company namegccv Company namegccv在命令行键入以下命令编译运行这段程序:v$gcc examplehello.c o hellov$./helloCompany namegccvgcc在上述过程中:运行预处理程序cpp在examplehello.c文件中插入包含文件stdio.h把经过预处理后的源代码编译成目标文件链接程序ld把目标文件与库文件链接并生成名为hello的二进制可执行文件。Company namegccCompany namegccv我们把上述过程分成几个步骤进行:v$gcc E examplehello.c o hello.iv$ls lv$more hello.iv第一行的-E可以使gcc在预处理后停止编译,并生成hello.i文件,将stdio.h的内容和其它应当被预处理的文件包含进来。Company namegccv Company namegccv继续键入下列命令:v$gcc c hello.i o hello.ovls-lv第一行将hello.i编译为目标代码,因gcc识别“.i”文件为预处理后的C语言文件,因此,gcc自动跳过预处理而开始执行编译过程。Company namegccv Company namegccv最后键入命令:v$gcc hello.o o helloov$ls lv$./helloov$./helloCompany namegccv Company namegccv大多数C程序是由多个源代码文件组成,必须将源代码文件编译成目标代码后才能链接。howdy.c使用了来自helper.c代码helper.c程序代码:/*helper.c-Helpercodeforhowdy.c*/#includevoidmsg(void)printf(“ThismessagesentfromJupier.n”);Company namegcchelper.c的头文件helper.h/*helper.hheaderforhelper.c*/voidmeg(void)Company namegcchowdy.c的源代码/*howdy.cModifed“Hello,World!”program*/#include#include“helper.h”intmain(void)printf(“Hello,Linuxprogrammingworld!n”);msg();return0;Company namegccv正确编译howdy.cv gcc howdy.c helper.c o howdyv过程:预处理编译链接Company namegccv gcc主要参数选项主要参数选项:v-x language 指定使用的语言(c、c+或汇编)v-c 只对文件进行编译和汇编,但不链接v-S 只对文件进行编译,但不汇编和链接v-E 只对文件进行预处理,但不编译、汇编和链接v-o file1 file2 将文件file2编译成可执行文件file1v-l directory 用于指定所使用的库文件v-I directory 为include文件的搜索指定路径v-w 禁止警告信息v-Wall 显示附加的警告信息Company namegccv-g 显示排错信息用于gdb调试v-static 创建静态程序库,有利于程序的调试v-O 优化编译代码v-MM 输出一个make兼容的相关列表v-v 输出gcc在编译过程中执行的每一个命令v-werror 把所有警告转换为错误,以在警告发生时中止编译过程v注注:更详细的选项可以提供执行man gcc或info gcc获得帮助。Company namegccv需要注意:有些选项是多个字母,因此多个单字母选项不能组合使用,否则会产生歧义。例如:v$gcc p g file.cv$gcc pg file.cv第一条gcc编译时为prof命令建立信息文件并把调试信息加入到可执行的文件中。v第二条gcc为gprof 命令建立信息文件。Company namegccv增加函数库和包含文件v-IDIRNAME 向GCC搜索包含(include)文件的路径中增加新目录gccmyapp.cI/home/fred/includeomyappv-LDIRNAME 同上,添加搜索路径,同时保证该路径比标准位置先被搜索。gccmyapp.cL/home/fred/liblnewomyapp-l选项使得链接程序使用指定的函数库中的目标代码,把函数库命名为lib名字是UNIX的约定组合的用法:gccmyapp.cL/home/fred/libI/home/fred/includelnewomyappCompany namegccv警告和出错选项-pedantic允许gcc发出遵循ANSI/ISO标准C语法的所有警告-pedanticerrors产生的错误是停止编译-ansi取消GNU扩展中所有与标准语法冲突部分-Wall能让gcc发出多种警告信息(如:从未所用过的变量)-w关闭所有警告信息Company name使用优化参数使用优化参数 v当调用gcc编译C代码时,gcc试图用最少的时间完成编译并且使编译后的代码易于调试。易于调试意味着编译后的代码与源代码有同样的执行次序,代码没有经过优化。可以采用gcc的优化选项控制gcc在编译时间花费和易于调试性的折中基础上产生更小更快的可执行文件。Company name-On选项选项 v针对优化级别n生成不同的优化代码。其中,n是一个可有可无的整数。v-O选项告诉gcc对源代码进行基本优化,提供程序执行的效率。Company name使用调试选项使用调试选项 vgcc支持几种调试选项,其中最常用的是-g和-pg。-g告诉gcc产生被GNU调试程序gdb使用的信息以便程序调试。v如果使用-g和-O联用,可以在与最终的程序尽可能相近的情况下调试代码,同时使用这两个选项时必须清楚所写的某些源代码已经在优化时被gcc做了改动。v-g gdb选项可以使代码包含gdb传有特性的调试信息以方便gdb的调试工作。v但任何一个调试选项都会使产生的可执行二进制文件的大小急剧增加,从而增加程序的执行开销。Company name使用调试选项使用调试选项v-p选项和-pg,可以用在可执行的二进制文件中包含程序运行的一些统计信息。这些信息可以是程序员观察程序的各部分的运行特性,发现性能瓶颈,以便提高程序运行效率。v-p在代码中键入prof工具能够识别的统计信息,而-pg则生成只能被GNU的prof(gprof)解释的信息。v-a使gcc生成的可执行程序中包含计数代码块的记录执行次数的代码。v-save-temps选项可以保存在编译过程中生成的中间文件,以利于调试。Company nameGcc的自定义符号的自定义符号 v如果必须的程序中用到一些Linux独有的特性,可以把那些无法移植的程序代码以条件编译命令封装起来,用预定义符号_linux_完成:v#ifdef _linux_v/*与Linux特性相关的代码*/v#endifCompany name链接链接 v将所有步骤输出的目标文件组合起来。一般,库程序可以在/lib与/usr/lib/目录下找到。v当使用静态程序库时,链接程序会找出程序中所需的模块,然后将它们拷贝到执行文件内。v而共享程序库会在执行文件内留下一个标记,指明当程序执行到此处时,首先必须载入这个程序库。v共享程序库可以使执行文件变得更小,在程序运行时可以占用更小的内存。v对于glibc2,动态链接库为/lib/ld-linux.so.2。v要想保证系统总是连接共享程序库,应检查程序库是否在正确的位置,并且用户是否拥有读权限。Company name链接链接vLinux中,静态程序库有类似与libname.a的名字,而共享程序库则是libname.so.x.y.z的形式。其中,x.y.z是版本序号。共享程序库通常都会有链接符号指向静态程序库和相关联的.so库。标准的程序库会包含共享与静态程序库两种形式。Company name链接链接v可以用ldd来查看程序需要用到的共享程序库。v$ldd /usr/bin/gccCompany name链接链接vLinux默认情况是链接共享程序库,如果Linux找不到这些共享程序库,会链接静态程序库。如果想在程序中强制使用静态库,用-static选项。v动态链接程序/装入程序ld.so会用到两个环境变量。$LD_LIBRARY_PATHZ在这些目录列表中可以搜索运行是的共享库。$LD_PRELOAD 是一个附件的有空格分隔的用户指定的共享库,它必须在所有库加载之前加载。Company name使用使用gcc的一个例子的一个例子v Company name其它编译调试工具其它编译调试工具v g+vEGCSvPGCCv callsv cprotov indentv gprofv f2c和p2cCompany nameg+v是GNU提供的对C语言的编译器。v g+与gcc具有相同的使用格式,即:v g+options filenamesv其中,“options”与gcc的主要选项大体类似,而“filenames”则需要使用C+文件。v有几种扩展名:“.C”、“.cc”和“.cxx”。Company nameEGCSvEGCS(Experimental/Enhanced GNU Compiler Syst
点击显示更多内容>>
收藏
网站客服QQ:
2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号