欢迎来到天天文库
浏览记录
ID:20369156
大小:117.00 KB
页数:8页
时间:2018-10-11
《gcc常见错误解析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、GCC常见错误解析一、错误类型第一类:C语法错误错误信息:文件source.c中第n行有语法错谋(syntexerrror)。这种类型的错误,一般都是C语言的语法错误,应该仔细检查源代码文件中第n行及该行之前的程序,有吋也需要对该文件所包含的头文件进行检查。有些情况下,一个很简单的语法错误,gcc会给出一大堆错误,此时要保持清醒的头脑,不耍被其吓倒,必耍的时候再参考一下C语言的基本教材。第二类:头文件错误错误信息:找不到头文件head.h(Cannotfindincludefilehead.h)。这类错误是源代码文件屮的包含头文件有问题,可能的原因有头文件名
2、错误、指定的头文件所在目录名错误等,也可能是错误地使用了双引号和尖括号。第三类:档案库错误错识信息:连接程序找不到所需的函数库,例如:Id:-lm:Nosuchfileordirectory.这类错误是与目标文件相连接的函数库冇错误,可能的原因是函数库名错误、指定的函数库所在目录名称错误等,检杳的方法是使用find命令在可能的FI录中寻找相应的函数庠名,确定档案庠及目求的名称并修改程序中及编译选项中的名称。第四类:未定义符号错误信息:有未定义的符号(Undefinedsymbol)。这类错误是在连接过程中出现的,可能食两种原因:一是使用者0己定义的函数或者全
3、局变量所在源代码文件,没食被编译、连接,或者干脆还没食定义,这需耍使用者根据实际情况修改源程序,给出全局变暈或者函数的定义体;二是未定义的符号是一个标准的库函数,在源程序中使用了该库函数,而连接过程中还没有给定相应的函数库的名称,或者是该档案库的目录名称冇问题,这时需要使用档案库维护命令ar检杳我们需要的库函数到底位于哪一个函数库中,确定之后,修改gcc连接选项屮的-1和-L项。排除编译、连接过程屮的错误,应该说这只是程序设计屮最简单、最基本的一个步骤,可以说只是开了个头。这个过程中的错误,只是我们在使用C语言描述一个算法屮所产生的错误,是比较容易排除的。我
4、们写一个程序,到编译、连接通过为止,应该说刚刚开始,程序在运行过程屮所出现的问题,是算法设计有问题,说得更玄点是对W题的认识和理解不够,还需要更加深入地测试、调试和修改。一个程序,稍为复杂的程序,往往耍经过多次的编译、连接和测试、修改。二、常见错误信息解析与处理21、预处理吋的错误信息Nosuchfileordirectory中文含义:没食和应文件或目录错误原因:编译器的搜索路径上找不到所需耍的文件。该文件可能已在命令行中指定,或在#include语句中说明。处理方法:查看文件名是否正确,或文件所存放的目录是否已添加到系统目录或链接目录屮。以下是样例:#in
5、clude/*错误:文件名不正确*/intmain(void){printf("HelloWorld!/nn);return0;}上面的程序试图引入一个不存在的文件‘stdoi.h’,这就会引发如下错误:‘stdoi.h:Nosuchfileordirectory’。而IE确的文件名皮该是‘stdio.h’。macroor'#include’recursiontoodeep屮文含义:宏或’#include
6、递归太深错误原因:iu^J#include嵌套太深。当预处理器遇到太多嵌套的#include指令时,会导致此错误。通常该错误由两个或多个
7、文件进行和互引用时,会引发无限递归。如:/*foo.h*/#include"bar.h"•••/*bar.h*/#include"foo.h"解决方法是确保各文件没食互和引用。invalidpreprocessingdirective#...中文含义:非法的预处理命令#...错误原因:该错误指明预处理器遇到了不可识别的#命令。如:#ifFOOintx=1;#elseifBAR/*应写成#elifintx=2;#elseintx=3;#endif预处理器语法在#if块中需耍#elif而不是"elseif’条件,也不是#elseifowarning:Thisfi
8、leincludesatleastonedeprecatedor3antiquatedheader.屮文含义:警告:文件屮至少引用了一个已废弃的或过时的头文件错误原因:该错误通常是在C++程序屮引用了旧式的头文件库,如’iostream.h’,在现代C++庠头文件没有’上’扩展名。旧头文件导入其函数到顶层全局名字空间,对C++需要使用名字空间。当然,对旧式风格的头文件仍然支持,所以对现食程序会继续编译,只是给岀警告。如:#include/*旧式风格*/intmain(void){cout«’’HelloWorld!/n";return
9、0;}_‘iostream.h’应改写为#inclu
此文档下载收益归作者所有