- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
g常见错误解析.doc
GCC常见错误解析
一、 错误类型
第一类:C语法错误
错误信息:文件source.c中第n行有语法错谋(syntex errror)。
这种类型的错误,一般都是C语言的语法错误,应该仔细检查源代码文件中 第n行及该行之前的程序,有吋也需要对该文件所包含的头文件进行检查。
有些情况下,一个很简单的语法错误,gcc会给出一大堆错误,此时要保持清 醒的头脑,不耍被其吓倒,必耍的时候再参考一下C语言的基本教材。
第二类:头文件错误
错误信息:找不到头文件 head.h(Can not find include file head.h)。
这类错误是源代码文件屮的包含头文件有问题,可能的原因有头文件名错误、 指定的头文件所在目录名错误等,也可能是错误地使用了双引号和尖括号。
第三类:档案库错误
错识信息:连接程序找不到所需的函数库,例如:Id: -lm: No such file or directory.
这类错误是与目标文件相连接的函数库冇错误,可能的原因是函数库名错误、
指定的函数库所在目录名称错误等,检杳的方法是使用find命令在可能的FI录中寻 找相应的函数庠名,确定档案庠及目求的名称并修改程序中及编译选项中的名称。 第四类:未定义符号
错误信息:有未定义的符号(Undefined symbol)。
这类错误是在连接过程中出现的,可能食两种原因:一是使用者0己定义的函 数或者全局变量所在源代码文件,没食被编译、连接,或者干脆还没食定义,这需 耍使用者根据实际情况修改源程序,给出全局变暈或者函数的定义体;二是未定义 的符号是一个标准的库函数,在源程序中使用了该库函数,而连接过程中还没有给 定相应的函数库的名称,或者是该档案库的目录名称冇问题,这时需要使用档案库 维护命令ar检杳我们需要的库函数到底位于哪一个函数库中,确定之后,修改gcc 连接选项屮的-1和-L项。
排除编译、连接过程屮的错误,应该说这只是程序设计屮最简单、最基本的一 个步骤,可以说只是开了个头。这个过程中的错误,只是我们在使用C语言描述 一个算法屮所产生的错误,是比较容易排除的。我们写一个程序,到编译、连接通 过为止,应该说刚刚开始,程序在运行过程屮所出现的问题,是算法设计有问题,
说得更玄点是对W题的认识和理解不够,还需要更加深入地测试、调试和修改。一 个程序,稍为复杂的程序,往往耍经过多次的编译、连接和测试、修改。
二、 常见错误信息解析与处理
2
1、预处理吋的错误信息
No such file or directory
中文含义:没食和应文件或目录
错误原因:编译器的搜索路径上找不到所需耍的文件。该文件可能已在命令行 中指定,或在#include语句中说明。
处理方法:查看文件名是否正确,或文件所存放的目录是否已添加到系统目录 或链接目录屮。以下是样例:
#include stdoi.h /*错误:文件名不正确*/ int main (void){
printf (Hello World!/nn);
return 0;
}
上面的程序试图引入一个不存在的文件‘stdoi.h’,这就会引发如下错误:
‘stdoi.h: No such file or directory’。而IE确的文件名皮该是‘stdio.h’。 macro or #include’ recursion too deep
屮文含义:宏或’#include|递归太深
错误原因:iu^J #include嵌套太深。当预处理器遇到太多嵌套的#include指 令时,会导致此错误。通常该错误由两个或多个文件进行和互引用时,会引发无限
递归。如:
/* foo.h */
#include bar.h
? ? ?
/* bar.h */
#include foo.h
解决方法是确保各文件没食互和引用。
invalid preprocessing directive #...
中文含义:非法的预处理命令#...
错误原因:该错误指明预处理器遇到了不可识别的#命令。如:
#if FOO
int x = 1;
#elseifBAR /* 应写成 #elif
int x = 2;
#else
int x = 3;
#endif
预处理器语法在#if块中需耍#elif而不是else if’条件,也不是
#elseifo
warning: This file includes at least one deprecated or
3
antiquated header.
屮文含义:警告:文件屮至少引用了一个已废弃的或过时的头文件
错误原因:该错误通常是在C++程序屮引用了旧式的头文件库,
如’iostream.h’,在现代C++庠头文件没有’上’扩展名。旧头文件导入其函数 到顶层全局名字空间,对C++需要使用
文档评论(0)