常见gcc 编译错误整理
- 格式:doc
- 大小:32.00 KB
- 文档页数:3
GCC常见错误解析一、错误类型第一类∶C语法错误错误信息∶文件source.c中第n行有语法错误(syntex errror)。
这种类型的错误,一般都是C语言的语法错误,应该仔细检查源代码文件中第n行及该行之前的程序,有时也需要对该文件所包含的头文件进行检查。
有些情况下,一个很简单的语法错误,gcc会给出一大堆错误,此时要保持清醒的头脑,不要被其吓倒,必要的时候再参考一下C语言的基本教材。
第二类∶头文件错误错误信息∶找不到头文件head.h(Can not find include file head.h)。
这类错误是源代码文件中的包含头文件有问题,可能的原因有头文件名错误、指定的头文件所在目录名错误等,也可能是错误地使用了双引号和尖括号。
第三类∶档案库错误错误信息∶连接程序找不到所需的函数库,例如∶ld: -lm: No such file or directory.这类错误是与目标文件相连接的函数库有错误,可能的原因是函数库名错误、指定的函数库所在目录名称错误等,检查的方法是使用find命令在可能的目录中寻找相应的函数库名,确定档案库及目录的名称并修改程序中及编译选项中的名称。
第四类∶未定义符号错误信息∶有未定义的符号(Undefined symbol)。
这类错误是在连接过程中出现的,可能有两种原因∶一是使用者自己定义的函数或者全局变量所在源代码文件,没有被编译、连接,或者干脆还没有定义,这需要使用者根据实际情况修改源程序,给出全局变量或者函数的定义体;二是未定义的符号是一个标准的库函数,在源程序中使用了该库函数,而连接过程中还没有给定相应的函数库的名称,或者是该档案库的目录名称有问题,这时需要使用档案库维护命令ar检查我们需要的库函数到底位于哪一个函数库中,确定之后,修改gcc 连接选项中的-l和-L项。
排除编译、连接过程中的错误,应该说这只是程序设计中最简单、最基本的一个步骤,可以说只是开了个头。
c语言常见编译错误提示1) error C2001: newline in constant编号:C2001直译:在常量中出现了换行。
错误分析:1.字符串常量、字符常量中是否有换行。
2.在这句语句中,某个字符串常量的尾部是否漏掉了双引号。
3.在这语句中,某个字符创常量中是否出现了双引号字符“"”,但是没有使用转义符“\"”。
4.在这句语句中,某个字符常量的尾部是否漏掉了单引号。
5.是否在某句语句的尾部,或语句的中间误输入了一个单引号或双引号。
2) error C2015: too many characters in constant编号:C2015直译:字符常量中的字符太多了。
错误分析:单引号表示字符型常量。
一般的,单引号中必须有且只能有一个字符(使用转义符时,转义符所表示的字符当作一个字符看待),如果单引号中的字符数多于4个,就会引发这个错误。
另外,如果语句中某个字符常量缺少右边的单引号,也会引发这个错误,例如:i f (x == 'x || x == 'y') { … }值得注意的是,如果单引号中的字符数是2-4个,编译不报错,输出结果是这几个字母的ASC码作为一个整数(int,4B)整体看待的数字。
3) error C2137: empty character constant编号:C2137直译:空的字符定义。
错误分析:原因是连用了两个单引号,而中间没有任何字符,这是不允许的。
4) error C2018: unknown character '0x##'编号:C2018直译:未知字符‘0x##’。
错误分析:0x##是字符ASC码的16进制表示法。
这里说的未知字符,通常是指全角符号、字母、数字,或者直接输入了汉字。
如果全角字符和汉字用双引号包含起来,则成为字符串常量的一部分,是不会引发这个错误的。
5) error C2041: illegal digit '#' for base '8'编号:C2141直译:在八进制中出现了非法的数字‘#’(这个数字#通常是8或者9)。
常见gcc 编译错误整理常见gcc 编译错误整理(开始) 11 error: expected expression before 'else' else之前无表达式。
2 error: lvalue required as left operand of assignment 左值问题。
3 error: invalid storage class for function 'XXXXXX' 在文件的某个地方,丢失了一个大括号‘}’。
常见gcc编译警告整理(开始)1、warning: no newline at end of file 在文件最后一行加上回车键解释:在《Rationale for the C99 standard》一文中,有C99的相关信息:A backslash immediately before a newline has long been used to continue string literals, as well as preprocessing command lines. In the interest of easing machine generation of C, and of transporting code to machines with restrictive physical line lengths, the C89 Committee generalized this mechanism to permit any token to be continued by interposing abackslash/newline sequence.c/c++代码的每一行后面有一个“结束符”,也就是newline。
避免当被include的文件展开后,前一个文件的最后一行与后一个文件的第一行直接被连接成一行从而造成错误。
常见gcc编译警告整理以及解决方法【收藏】
1、warning: no newline at end of file
在文件最后一行加上回车键
解释:在《Rationale for the C99 standard》一文中,有C99的相关信息:
A backslash immediately before a newline has long been used to continue string literals, as well as preprocessing command lines. In the interest of easing machine generation of C, and of transporting code to machines with restrictive physical line lengths, the C89 Committee generalized this mechanism to permit any token to be continued by interposing a backslash/newline sequence.
c/c++代码的每一行后面有一个结束符,也就是newline。
避免当被include
的文件展开后,前一个文件的最后一行与后一个文件的第一行直接被连接成一行从而造成错误。
2、warning: comparison between pointer and integer
解释:integer与pointer比较
3、warning: assignment discards qualifiers from pointer target type。
常见编译错误
引言
刚开始接触代码的时候的由于自己对知识点的不了解,达不到准确的应用,所以会发生一些常见的编译异常。
这是很多新手都会遇到的问题,所以小慕为大家准备了一些常见的编译错误和解决方法。
Tips:如果在编程中出现编译错误,可以将光标移动到代码飘红处,然后会出现如下提示,建议同学仔细阅读提示中的英文(如果有不明白的地方,可以去使用翻译软件进行翻译)
1、重复定义相同变量名(导致编译错误)
示例代码
错误原因:该错误是d1这个变量重复定义了,也就是说一山不容二虎,如果同为方法内的变量,就不可以重复定义相同的变量名。
改为double d2 = d即可。
2、类型不匹配:无法将字符串转换为字符
示例代码
错误原因
char类型的数据表示一个字符,它可以是a,或者是1,但是不能用双引号老表示,只能用单引号来表示。
双引号表示的是字符串,应该用String类型的数据来接收。
3、final关键字修饰的常量无法再次赋值
示例代码
错误原因
final关键字修饰的常量是无法再进行赋值的,否则会出现上图中的编译错误。
4、超出类型取值范围的错误
示例代码
错误原因
int类型数据的取值范围是-2的31次方到2的31次方-1所以103948583923948超出了int类型的取值范围,应改用long类型(长整型),需要在103948583923948后加一个L。
Gcc最基本的用法是∶gcc [options] [filenames] 其中options就是编译器所需要的参数,filenames给出相关的文件名称。
-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。
-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。
如果不给出这个选项,gcc就给出预设的可执行文件a.out。
1.linker input file unused because linking not done我在Windows下使用SQLite编了个C++程序,在编写Makefile并使用cygwin 中的g++进行编译链接时遇到如下的错误:linker input file unused because linking not done我的语句是g++ -c a.cpp -lsqlite3到网上查了一下,问题出在链接数据库的语句不应出现在编译语句里面。
上面的语句里面有-c 即编译compile,所以命令会忽略掉所有的-l 链接库的命令。
而要链接数据库,应该在生成可执行文件时才使用。
正确的使用链接的语句应该是g++ a.o -L. -lsqlite3 -o exename2.Linux系统的头文件和库文件搜索路径**#include**的头文件,连结数据库,系统定义,总共有下列来源指定gcc去那找。
∙当初在编译时指定的(在~gcc/gcc/collect2.c:locatelib()∙写在specs内的(针对rpm包)∙后来用-D -I -L指定的∙gcc环境变量设定(编译的时候)∙ld.so的环境变量(这是run time的时候)头文件gcc 在编译时如何去寻找所需要的头文件:∙header file的搜寻会从-I开始∙然后找gcc的环境变量C_INCLUDE_PA TH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PA TH∙再找内定目录:o/usr/includeo/usr/local/includeo/usr/lib/gcc-lib/i386-linux/2.95.2/includeo/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../include/g++-3o/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i386-linux/include∙库文件但是如果装gcc的时候,是有给定的prefix的话,那么就是o/usr/includeo prefix/includeo prefix/xxx-xxx-xxx-gnulibc/includeo prefix/lib/gcc-lib/xxxx-xxx-xxx-gnulibc/2.8.1/include库文件cos()等函式库的选项要多加-lm∙编译的时候:gcc会去找-L∙再找gcc的环境变量LIBRARY_PATH∙再找内定目录/lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的运行时动态库的搜索路径1 在配置文件/etc/ld.so.conf中指定动态库搜索路径2 通过环境变量LD_LIBRARY_PA TH指定动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔)3 在编译目标代码时指定该程序的动态库搜索路径(还可以在编译目标代码时指定程序的动态库搜索路径。
C语⾔编译中的常见错误C语⾔编译中的常见错误1、警告类错误‘XXX’declare but never used变量XXX已定义但从未⽤过。
‘XXX’is assigned a value which is never used变量XXX已赋值但从未⽤过。
Code has no effect 程序中含有没有实际作⽤的代码。
Non-portable pointer conversion不适当的指针转换,可能是在应该使⽤指针的地⽅⽤了⼀个⾮0的数值。
Possible us e of ‘XXX’before definition表达式中使⽤了未赋值的变量Possibly incorrect assignment这样的赋值可能不正确Redeclaration of ‘main’⼀个程序⽂件中主函数main不⽌⼀个。
Suspicious pointer conversion可疑的指针转换。
通常是使⽤了基本类型不匹配的指针。
Unreachable code程序含有不能执⾏到的代码。
2、错误或致命错误Compound statement missing } in function main程序结尾缺少括号}。
“}”expected;“(”expected等复合语句或数组初始化的结尾缺少“)”;“(”。
Case outside of switch case不属于Switch结构,多由于switch结构中的花括号不配对所致。
Case statement missing ‘:’switch结构中的某个case之后缺少冒号。
Constant expression required定义数组时指定的数组长度不是常量表达式。
Declaration syntax error 结构体或联合类型的定义后缺少分号。
Declaration was expected 缺少说明,通常是因为缺少分界符如逗号、分号、右圆括号等所引起的。
Default outside switch Default部分放到了switch结构之外,⼀般是因为花括号不匹配⽽引起的。
如何解决C语言中的编译错误与警告C语言是一种广泛应用于系统编程和嵌入式开发的编程语言,它的编译过程中常常会出现各种错误和警告。
这些错误和警告可能会导致程序无法正确编译或者在运行时出现问题。
因此,解决C语言中的编译错误与警告是每个程序员都需要掌握的重要技能。
本文将介绍一些常见的编译错误和警告,并提供一些解决方法。
一、理解编译错误和警告的含义在解决编译错误和警告之前,我们首先需要理解它们的含义。
编译错误是指在编译过程中发现的语法错误或者逻辑错误,这些错误会导致程序无法正确编译。
编译警告是指在编译过程中发现的一些潜在的问题,虽然不会导致程序无法编译,但可能会导致程序在运行时出现问题。
二、常见的编译错误和警告1. 语法错误:语法错误是最常见的编译错误之一,它通常是由于编程人员在编写代码时遗漏了分号、括号不匹配等导致的。
解决语法错误的方法是仔细检查代码,确保语法正确。
2. 未声明的标识符:当使用一个未声明的标识符时,编译器会报错。
解决这个问题的方法是在使用标识符之前先进行声明或者引入相应的头文件。
3. 类型不匹配:类型不匹配是指在赋值或者函数调用过程中,变量的类型与期望的类型不一致。
解决这个问题的方法是检查变量的类型,并进行相应的类型转换。
4. 未使用的变量:编译器会对未使用的变量发出警告,这可能是由于代码中存在一些无用的变量。
解决这个问题的方法是删除未使用的变量或者对其进行使用。
5. 未初始化的变量:未初始化的变量可能导致程序在运行时出现未定义的行为。
解决这个问题的方法是在使用变量之前先进行初始化。
6. 函数返回值不匹配:函数的返回值类型与函数定义时声明的返回值类型不一致会导致编译错误。
解决这个问题的方法是检查函数的返回值类型,并进行相应的修改。
7. 潜在的内存泄漏:编译器可能会对未释放的内存发出警告,这可能会导致内存泄漏。
解决这个问题的方法是在使用完内存后及时释放。
三、解决编译错误和警告的方法1. 仔细阅读编译错误和警告信息:编译器通常会提供详细的错误和警告信息,我们应该仔细阅读这些信息,找出问题所在。
常见gcc编译问题解决⽅法集除⾮明确说明,本⽂内容仅针对x86/x86_64的Linux开发环境,有朋友说baidu不到,开个贴记录⼀下(加粗字体是关键词):⽤“-Wl,-Bstatic”指定链接静态库,使⽤“-Wl,-Bdynamic”指定链接共享库,使⽤⽰例:-Wl,-Bstatic -lmysqlclient_r -lssl -lcrypto -Wl,-Bdynamic -lrt -Wl,-Bdynamic -pthread -Wl,-Bstatic -lgtest ("-Wl"表⽰是传递给链接器ld的参数,⽽不是编译器gcc/g++的参数。
)1) 下⾯是因为没有指定链接参数-lz(/usr/lib/libz.so,/usr/lib/libz.a )/usr/local/mysql/lib/mysql/libmysqlclient.a(my_compress.c.o): In function `my_uncompress':/home/software/mysql-5.5.24/mysys/my_compress.c:122: undefined reference to `uncompress'/usr/local/mysql/lib/mysql/libmysqlclient.a(my_compress.c.o): In function `my_compress_alloc':/home/software/mysql-5.5.24/mysys/my_compress.c:71: undefined reference to `compress'2) 下⾯是因为没有指定编译链接参数-pthread(注意不仅仅是-lpthraed)/usr/local/mysql/lib/mysql/libmysqlclient.a(charset.c.o): In function `get_charset_name':/home/zhangsan/mysql-5.5.24/mysys/charset.c:533: undefined reference to `pthread_once'3) 下⾯这个是因为没有指定链接参数-lrt/usr/local/thirdparty/curl/lib/libcurl.a(libcurl_la-timeval.o): In function `curlx_tvnow':timeval.c:(.text+0xe9): undefined reference to `clock_gettime'4) 下⾯这个是因为没有指定链接参数-ldl/usr/local/thirdparty/openssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup':dso_dlfcn.c:(.text+0x4c): undefined reference to `dlopen'dso_dlfcn.c:(.text+0x62): undefined reference to `dlsym'dso_dlfcn.c:(.text+0x6c): undefined reference to `dlclose'5) 下⾯这个是因为指定了链接参数-static,它的存在,要求链接的必须是静态库,⽽不能是共享库ld: attempted static link of dynamic object如果是以-L加-l⽅式指定,则⽬录下必须有.a⽂件存在,否则会报-l的库⽂件找不到:ld: cannot find -lACE6) GCC编译遇到如下的错误,可能是因为在编译时没有指定-fPIC,记住:-fPIC即是编译参数,也是链接参数relocation R_x86_64_32S against `vtable for CMyClass` can not be used when making a shared object7) 下⾯的错误表⽰gcc编译时需要定义宏__STDC_FORMAT_MACROS,并且必须包含头⽂件inttypes.htest.cpp:35: error: expected `)' before 'PRIu64'8) 下⾯是因为在x86机器(32位)上编译没有指定编译参数-march=pentium4../../src/common/libmooon.a(logger.o): In function `atomic_dec_and_test':../../include/mooon/sys/atomic_gcc.h:103: undefined reference to `__sync_sub_and_fetch_4'9) 下列错误可能是因为多了个“}”error: expected declaration before '}' token10) 下列错误可能是因为少了个“}”error: expected `}' at end of input11) 下⾯这个错误是编译⼀个共享库时,该共享库依赖的⼀静态库编译时没有加“-fPIC”参数,解决⽅法为带“-fPIC”重新编译被依赖的静态库relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC12) 下⾯这个错误,是因为头⽂件中使⽤“_syscall0(pid_t, gettid)”不当引起的./test.o: In function `gettid()':./test.h:17: multiple definition of `gettid()'正确的⽤法是使⽤"inline"或"static inline"修饰⼀下:inline _syscall0(pid_t, gettid)或static inline _syscall0(pid_t, gettid)当然也可以这样:在.h头⽂件中:extern "C" pid_t gettid(void);在.cpp⽂件中:_syscall0(pid_t, gettid)_syscall0是⼀个宏,定义⼀个函数的实现。
个人总结:1. gcc 预处理阶段-E常见错误:No such file or directorygcc -E file.c -o file.i 其中file.i为预处理后的c文件,gcc所做的工作是将头文件的内容迭代包含到i 文件,c文件的代码不变。
此时如果gcc在默认路径没有搜索到c 文件中包含的h文件,则出现错误。
i 文件仍是c文件。
解决办法:增加搜索路径。
2.gcc 编译阶段-S常见错误:变量未声明;expected ";" before ;提供给函数"function-name"的参数太少这一阶段将c文件转为s 汇编文件,会对变量是否声明,“;”是否缺失等进行简单语法检查;但并不对函数是否声明进行检查,即使没有声明第一次使用,函数转换后的汇编为:call function-name 。
解决办法:查看变量的声明是否被包含进c文件,是否头文件未包含,或根本未定义。
语句末加" ; "。
函数声明的参数少于调用时的参数不会出现问题,反过来就不可以。
3.gcc 汇编阶段-c4.gcc 链接阶段常见错误:a) 如:In function ' main': undefined reference to ' funtion-name'Collect2: ld return 1解决办法:不能找到函数的声明,看是否函数声明了,或者相应的头文件有无包含。
b) 如:解决办法:5 Segmentation fault报错Char* string;String = (char*)malloc(sizeof(char)*1000);String="";Strcat(string, "sfasfasf");原因:string="", 使string指针指向另一块地址,不再是malloc申请的地址。
【GCC】gcc警告选项汇总--编辑中gcc编译选项⽬录参考原⽂:https:///qq_17308321/article/details/79979514前⾔警告:不是错误的,但是有风险或表明可能有错误。
英⽂原⽂:请求或取消警告选项加上-Wall吧,gcc 默认不加参数的情况下连定义了返回值的函数没有返回值都不报错。
-Wall,-Wextra 就是加-Wall 和-Wall不启动的选项也加上()-fsyntax-only检查代码中的语法错误,但除此之外不要做任何事情。
-w (⼩写)禁⽌所有警告消息。
-W (⼤写)以“ -W ”请求特定的警告 - 可以隐式地请求隐式声明的警告。
-W和-Wall的区别-Wall选项意思是编译后显⽰所有警告。
-W选项类似-Wall,会显⽰警告,但是只显⽰编译器认为会出现错误的警告。
在编译⼀些项⽬的时候可以-W和-Wall选项⼀起使⽤。
gcc -W -Wall test_w_wall testwwall.c-Werror=将指定的警告转换为错误。
请注意,指定-Werror = foo会⾃动隐含-W foo 。
但是, -Wno-error = foo并不意味着什么。
反过来:-Wno-error取消编译选项-Werror⽤途:假设我们使⽤了⼀个⼈的代码A⽬录,⾥⾯有⼀个-Werror的选项,把所有的警告当做错误;⼜使⽤了另⼀个⼈的代码B⽬录,⾥⾯存在⼀堆Warning。
这样,当我们把它们合在⼀起编译的时候,A中的-Werror选项会导致B的代码编译不过。
但我们⼜不想去修改B的代码,怎么办?⽅法是,先add_subdirectory(A),之后,加上⼀句set(CMAK_CXX_FLAGS "${CMAK_CXX_FLAGS} -Wno-error")-Wno-这个前缀,就是⽤来取消⼀个编译选项的然后,再add_subdirectory(B)-Wfatal-errors在发⽣第⼀个错误时中⽌编译。
1、warning: no newline at end of file在文件最后一行加上回车键解释:在《Rationale for the C99 standard》一文中,有C99的相关信息:A backslash immediately before a newline has long been used to continue string literals, as well as preprocessing command lines、In the interest of easing machine generation of C, and of transporting code to machines with restrictive physical line lengths, the C89 Committee generalized this mechanism to permit any token to be continued by interposing abackslash/newline sequence、c/c++代码的每一行后面有一个“结束符”,也就就是newline。
避免当被include的文件展开后,前一个文件的最后一行与后一个文件的第一行直接被连接成一行从而造成错误。
2、warning: comparison between pointer and integer解释:integer与pointer比较3、 warning: assignment discards qualifiers from pointer target type解释:赋值时,取消了右值的限定。
4、 warning: passing argument 1 of 'send' makes pointer from integer without a cast解释:函数send的第一个integer型参数没有强制转换为pointer型5、warning: comparison is always true due to limited range of data type解释:由于数据类型范围的限制,比较结果一直为真。
C语言编译中的常见错误1、警告类错误?‘XXX’declare but never used变量XXX已定义但从未用过。
?‘XXX’is assigned a value which is never used变量XXX已赋值但从未用过。
?Code has no effect 程序中含有没有实际作用的代码。
?Non-portable pointer conversion不适当的指针转换,可能是在应该使用指针的地方用了一个非0的数值。
?Possib le use of ‘XXX’before definition表达式中使用了未赋值的变量?Possibly incorrect assignment这样的赋值可能不正确?Redeclaration of ‘main’一个程序文件中主函数main不止一个。
?Suspicious pointer conversion可疑的指针转换。
通常是使用了基本类型不匹配的指针。
?Unreachable code程序含有不能执行到的代码。
2、错误或致命错误?Compound statement missing } in function main程序结尾缺少括号}。
?“}”expected;“(”expected等复合语句或数组初始化的结尾缺少“)”;“(”。
?Case outside of switch case不属于Switch结构,多由于switch结构中的花括号不配对所致。
?Case statement missing ‘:’switch结构中的某个case之后缺少冒号。
?Constant expression required定义数组时指定的数组长度不是常量表达式。
?Declaration syntax error 结构体或联合类型的定义后缺少分号。
?Declaration was expected 缺少说明,通常是因为缺少分界符如逗号、分号、右圆括号等所引起的。
gcc错误解决方法(5篇)第一篇:gcc错误解决方法原因:因为安装其他软件,升级gcc相关的软件,造成gcc编译错误,说没有gcc,解决方法,用系统盘重新安装gcc。
具体方法如下:[root@mail /]# rpm-e--nodeps cpp[root@mail /]# rpm-qa | grep gcclibgcc-4.1.2-48.el5gcc-java-4.1.2-48.el5libgcc-4.1.2-48.el5gcc-c++-4.1.2-48.el5gcc-gfortran-4.1.2-48.el5[root@mail /]# rpm-ivh /root/rpm/cpp-4.1.2-46.el5.x86_64.rpmPreparing...#################################### ####### [100%]1:cpp########################################### [100%][root@mail /]# rpm-ivh /root/rpm/gcc-4.1.2-46.el5.x86_64.rpmPreparing...#################################### ####### [100%]1:gcc######################################### ## [100%][root@mail /]# rpm-qa | grep kernel-headerskernel-headers-2.6.18-194.26.1.el5[root@mail /]# rpm-e--nodeps kernel-headers[root@mail /]# rpm-qa | grep kernel-headers[root@mail /]# rpm-ivh /root/rpm/kernel-headers-2.6.18-164.el5.x86_64.rpmPreparing...#################################### ####### [100%]1:kernel-headers########################################## # [100%][root@mail /]# rpm-qa | grep glibc-headersglibc-headers-2.5-42[root@mail /]# rpm-qa | grep glibc-headersglibc-headers-2.5-42[root@mail /]# rpm-e--nodeps glibc-headers[root@mail /]# rpm-ivh /root/rpm/glibc-headers-2.5-42.x86_64.rpmPreparing...#################################### ####### [100%]1:glibc-headers########################################## # [100%][root@mail /]# rpm-qa | grep glibc-develglibc-devel-2.5-42glibc-devel-2.5-42[root@mail /]# rpm-e--nodeps glibc-develerror: “glibc-devel” specifies multiple packages[root@mail /]# rpm-q--queryformat “%{NAME}-%{VERSION}-%{RELEASE}(%{ARCH})n” glibc-devel glibc-devel-2.5-42(i386)glibc-devel-2.5-42(x86_64)[root@mail /]# rpm-e--nodeps glibc-devel*error: package glibc-devel* is not installed[root@mail /]# rpm-e--nodeps glibc-devel-2.5-42(i386)-bash: syntax error near unexpected token `('[root@mail /]# rpm-e--nodeps glibc-devel-2.5-42(i386)error: “glibc-devel-2.5-42” specifies multiple packageserror: package(i386)is not installed[root@mail /]# rpm-e--allmatches glibc-develerror: Failed dependencies:glibc-devel >= 2.2.90-12 is needed by(installed)gcc-4.1.2-46.el5.x86_64[root@mail /]# rpm-qa | grep gcclibgcc-4.1.2-48.el5gcc-java-4.1.2-48.el5libgcc-4.1.2-48.el5gcc-c++-4.1.2-48.el5gcc-gfortran-4.1.2-48.el5gcc-4.1.2-46.el5[root@mail /]# rpm-qa | grep glibc-develglibc-devel-2.5-42glibc-devel-2.5-42[root@mail /]# rpm-e--allmatches--nodeps glibc-devel[root@mail /]# rpm-qa | grep glibc-devel[root@mail /]# rpm-ivh /root/rpm/glibc-devel-2.5-42.i386.rpmerror: Failed dependencies:binutils < 2.15.94.0.2-1 conflicts with glibc-devel-2.5-42.i386 [root@mail /]# rpm-ivh /root/rpm/glibc-devel-2.5-42.x86_64.rpmerror: Failed dependencies:binutils < 2.15.94.0.2-1 conflicts with glibc-devel-2.5-42.x86_64[root@mail /]# rpm-qa | grep binutilsbinutils-2.15.92.0.2-13.0.0.0.2binutils-2.17.50.0.6-14.el5[root@mail /]# rpm-q--queryformat “%{NAME}-%{VERSION}-%{RELEASE}(%{ARCH})n” binutils binutils-2.17.50.0.6-14.el5(x86_64)binutils-2.15.92.0.2-13.0.0.0.2(x86_64)[root@mail /]# rpm-e--allmatches--nodeps binutils/sbin/ldconfig: libraries libdb.so.2 and libgdbm.so.2.0.0 in directory /usr/lib have same soname but different type./sbin/ldconfig: libraries libdb.so.2 and libgdbm.so.2.0.0 in directory /usr/lib have same soname but different type.[root@mail /]# rpm-q--queryformat “%{NAME}-%{VERSION}-%{RELEASE}(%{ARCH})n” binutils package binutils is not installed[root@mail /]# rpm-ivh /root/rpm/binutils-2.17.50.0.6-12.el5.x86_64.rpmPreparing...#################################### ####### [100%]1:binutils###################################### ##### [100%]/sbin/ldconfig: libraries libdb.so.2 and libgdbm.so.2.0.0 in directory /usr/lib have same soname but different type.[root@mail /]# rpm-ivh /root/rpm/glibc-devel-2.5-42.* Preparing...#################################### ####### [100%]1:glibc-devel########################################### [ 50%]2:glibc-devel########################################### [100%][root@mail /]# rpm-qa | grep libgomplibgomp-4.4.0-6.el5[root@mail /]# rpm-e--nodeps libgomp/sbin/ldconfig: libraries libdb.so.2 and libgdbm.so.2.0.0 in directory /usr/lib have same soname but different type.[root@mail /]# rpm-qa | grep libgomp[root@mail /]# rpm-qa | grep libgomp*[root@mail /]# rpm-qa | grep libstdc++-devellibstdc++-devel-4.1.2-48.el5[root@mail /]# rpm-e--nodeps libstdc++-devel[root@mail /]# rpm-ivh /root/rpm/libstdc++-devel*error: Failed dependencies:libstdc++ = 4.1.2-46.el5 is needed by libstdc++-devel-4.1.2-46.el5.i386libstdc++ = 4.1.2-46.el5 is needed by libstdc++-devel-4.1.2-46.el5.x86_64[root@mail /]# rpm-qa | grep libstdc++libstdc++-4.1.2-48.el5compat-libstdc++-33-3.2.3-61compat-libstdc++-296-2.96-138libstdc++-4.1.2-48.el5compat-libstdc++-33-3.2.3-61[root@mail /]# rpm-ivh /root/rpm/libstdc++-devel-4.1.2-46.el5.x86_64.rpmerror: Failed dependencies:libstdc++ = 4.1.2-46.el5 is needed by libstdc++-devel-4.1.2-46.el5.x86_64[root@mail /]# rpm-e--nodeps libstdc++error: “libstdc++” specifies multiple packages[root@mail /]# rpm-e--nodeps--allmatcheslibstdc++/sbin/ldconfig: libraries libdb.so.2 and libgdbm.so.2.0.0 in directory /usr/lib have same soname but different type./sbin/ldconfig: libraries libdb.so.2 and libgdbm.so.2.0.0 in directory /usr/lib have same soname but different type.[root@mail /]# rpm-ivh /root/rpm/libstdc++*Preparing...#################################### ####### [100%]1:libstdc++#################################### ####### [ 25%]/sbin/ldconfig: libraries libdb.so.2 and libgdbm.so.2.0.0 in directory /usr/lib have same soname but different type.2:libstdc++################################### ######## [ 50%]/sbin/ldconfig: libraries libdb.so.2 and libgdbm.so.2.0.0 in directory /usr/lib have same soname but different type.3:libstdc++-devel########################################### [ 75%]4:libstdc++-devel########################################### [100%][root@mail /]# rpm-ivh /root/rpm/compat-libstdc++-compat-libstdc++-296-2.96-138.i386.rpmcompat-libstdc++-33-3.2.3-61.i386.rpmcompat-libstdc++-33-3.2.3-61.x86_64.rpm[root@mail /]# rpm-ivh /root/rpm/compat-libstdc++-compat-libstdc++-296-2.96-138.i386.rpmcompat-libstdc++-33-3.2.3-61.i386.rpmcompat-libstdc++-33-3.2.3-61.x86_64.rpm[root@mail /]# rpm-ivh /root/rpm/compat-libstdc++-*Preparing...#################################### ####### [100%]package compat-libstdc++-33-3.2.3-61.x86_64 is already installedpackage compat-libstdc++-296-2.96-138.i386 is already installedpackage compat-libstdc++-33-3.2.3-61.i386 is already installed[root@mail /]# rpm-ivh /root/rpm/gcc-c++-4.1.2-46.el5.x86_64.rpmPreparing...#################################### ####### [100%]package gcc-c++-4.1.2-48.el5.x86_64(which is newer than gcc-c++-4.1.2-46.el5.x86_64)is already installedfile /usr/bin/c++ from install of gcc-c++-4.1.2-46.el5.x86_64 conflicts with file from package gcc-c++-4.1.2-48.el5.x86_64 file /usr/bin/g++ from install of gcc-c++-4.1.2-46.el5.x86_64 conflicts with file from package gcc-c++-4.1.2-48.el5.x86_64 file /usr/bin/x86_64-redhat-linux-c++ from install of gcc-c++-4.1.2-46.el5.x86_64 conflicts with file from package gcc-c++-4.1.2-48.el5.x86_64file /usr/bin/x86_64-redhat-linux-g++ from install of gcc-c++-4.1.2-46.el5.x86_64 conflicts with file from package gcc-c++-4.1.2-48.el5.x86_64file /usr/lib/gcc/x86_64-redhat-linux/4.1.1/32/libsupc++.a from install of gcc-c++-4.1.2-46.el5.x86_64 conflicts with file from package gcc-c++-4.1.2-48.el5.x86_64file /usr/lib/gcc/x86_64-redhat-linux/4.1.1/libsupc++.a from install of gcc-c++-4.1.2-46.el5.x86_64 conflicts with file from package gcc-c++-4.1.2-48.el5.x86_64file /usr/libexec/gcc/x86_64-redhat-linux/4.1.1/cc1plus from install of gcc-c++-4.1.2-46.el5.x86_64 conflicts with file from package gcc-c++-4.1.2-48.el5.x86_64file /usr/share/man/man1/g++.1.gz from install of gcc-c++-4.1.2-46.el5.x86_64 conflicts with file from package gcc-c++-4.1.2-48.el5.x86_64第二篇:LoadRunner错误及解决方法LoadRunner错误及解决方法[转]分类:性能测试一、Step download timeout(120 seconds)这是一个经常会遇到的问题,解决得办法走以下步骤:1、修改run time setting中的请求超时时间,增加到600s,其中有三项的参数可以一次都修改了,HTTP-request connect timeout,HTTP-request receieve timeout,Step download timeout,分别建议修改为600、600、5000;run time setting设置完了后记住还需要在controler组件的option的run time setting中设置相应的参数;2、办法一不能解决的情况下,解决办法如下:设置runt time setting中的internet protocol-preferences中的advaced区域有一个winlnet replay instead of sockets选项,选项后再回放就成功了。
非常实用的,吸收前辈的经验,我们才能少走弯路。
和C 编译器错误信息中文翻译(1)L15 重复调用***WARNING L15: MULTIPLE CALL TO SEGMENTSEGMENT: ?PR?SPI_RECEIVE_WORD?D_SPICALLER1: ?PR?VSYNC_INTERRUPT?MAINCALLER2: ?C_C51STARTUP该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断服务程序的函数)同时调用,或者同时被多个中断服务程序调用。
出现这种问题的原因之一是这个函数是不可重入性函数,当该函数运行时它可能会被一个中断打断,从而使得结果发生变化并可能会引起一些变量形式的冲突(即引起函数内一些数据的丢失,可重入性函数在任何时候都可以被ISR 打断,一段时间后又可以运行,但是相应数据不会丢失)。
原因之二是用于局部变量和变量(暂且这样翻译,arguments,[自变量,变元一数值,用于确定程序或子程序的值])的内存区被其他函数的内存区所覆盖,如果该函数被中断,则它的内存区就会被使用,这将导致其他函数的内存冲突。
例如,第一个警告中函数WRITE_GMVLX1_REG 在D_GMVLX1.C 或者D_GMVLX1.A51 被定义,它被一个中断服务程序或者一个调用了中断服务程序的函数调用了,调用它的函数是VSYNC_INTERRUPT,在MAIN.C 中。
解决方法:如果你确定两个函数决不会在同一时间执行(该函数被主程序调用并且中断被禁止),并且该函数不占用内存(假设只使用寄存器),则你可以完全忽略这种警告。
如果该函数占用了内存,则应该使用连接器(linker)OVERLAY 指令将函数从覆盖分析(overlayanalysis)中除去,例如:OVERLAY (?PR?_WRITE_GMVLX1_REG?D_GMVLX1 ! *)上面的指令防止了该函数使用的内存区被其他函数覆盖。
C语言常见编译错误及分析大全1、fatal error C1003: error count exceeds number; stopping compilation中文对照:(编译错误)错误太多,停止编译分析:修改之前的错误,再次编译2、fatal error C1004: unexpected end of file found中文对照:(编译错误)文件未结束分析:一个函数或者一个结构定义缺少“}”、或者在一个函数调用或表达式中括号没有配对出现、或者注释符“/*…*/”不完整等3、fatal error C1083: Cannot open include file: 'xxx': No such file or directory中文对照:(编译错误)无法打开头文件xxx:没有这个文件或路径分析:头文件不存在、或者头文件拼写错误、或者文件为只读4、fatal error C1903: unable to recover from previous error(s); stopping compilation 中文对照:(编译错误)无法从之前的错误中恢复,停止编译分析:引起错误的原因很多,建议先修改之前的错误5、error C2001: newline in constant中文对照:(编译错误)常量中创建新行分析:字符串常量多行书写6、error C2006: #include expected a filename, found 'identifier'中文对照:(编译错误)#include命令中需要文件名分析:一般是头文件未用一对双引号或尖括号括起来,例如“#include stdio.h”7、error C2007: #define syntax中文对照:(编译错误)#define语法错误分析:例如“#define”后缺少宏名,例如“#define”8、error C2008: 'xxx' : unexpected in macro definition中文对照:(编译错误)宏定义时出现了意外的xxx分析:宏定义时宏名与替换串之间应有空格,例如“#define TRUE"1"”9、error C2009: reuse of macro formal 'identifier'中文对照:(编译错误)带参宏的形式参数重复使用分析:宏定义如有参数不能重名,例如“#define s(a,a) (a*a)”中参数a重复10、error C2010: 'character' : unexpected in macro formal parameter list中文对照:(编译错误)带参宏的形式参数表中出现未知字符分析:例如“#define s(r|) r*r”中参数多了一个字符‘|’11、error C2014: preprocessor command must start as first nonwhite space中文对照:(编译错误)预处理命令前面只允许空格分析:每一条预处理命令都应独占一行,不应出现其他非空格字符12、error C2015: too many characters in constant中文对照:(编译错误)常量中包含多个字符分析:字符型常量的单引号中只能有一个字符,或是以“\”开始的一个转义字符,例如“char error = 'error';”13、error C2017: illegal escape sequence中文对照:(编译错误)转义字符非法分析:一般是转义字符位于' ' 或" " 之外,例如“char error = ' '\n;”14、error C2018: unknown character '0xhh'中文对照:(编译错误)未知的字符0xhh分析:一般是输入了中文标点符号,例如“char error = 'E';”中“;”为中文标点符号15、error C2019: expected preprocessor directive, found 'character'中文对照:(编译错误)期待预处理命令,但有无效字符分析:一般是预处理命令的#号后误输入其他无效字符,例如“#!define TRUE 1”16、error C2021: expected exponent value, not 'character'中文对照:(编译错误)期待指数值,不能是字符分析:一般是浮点数的指数表示形式有误,例如123.456E17、error C2039: 'identifier1' : is not a member of 'identifier2'中文对照:(编译错误)标识符1不是标识符2的成员分析:程序错误地调用或引用结构体、共用体、类的成员18、error C2041: illegal digit 'x' for base 'n'中文对照:(编译错误)对于n进制来说数字x非法分析:一般是八进制或十六进制数表示错误,例如“int i = 081;”语句中数字‘8’不是八进制的基数19、error C2048: more than one default中文对照:(编译错误)default语句多于一个分析:switch语句中只能有一个default,删去多余的default20、error C2050: switch expression not integral中文对照:(编译错误)switch表达式不是整型的分析:switch表达式必须是整型(或字符型),例如“switch ("a")”中表达式为字符串,这是非法的21、error C2051: case expression not constant中文对照:(编译错误)case表达式不是常量分析:case表达式应为常量表达式,例如“case "a"”中“"a"”为字符串,这是非法的22、error C2052: 'type' : illegal type for case expression中文对照:(编译错误)case表达式类型非法分析:case表达式必须是一个整型常量(包括字符型)23、error C2057: expected constant expression中文对照:(编译错误)期待常量表达式分析:一般是定义数组时数组长度为变量,例如“int n=10; int a[n];”中n为变量,这是非法的24、error C2058: constant expression is not integral中文对照:(编译错误)常量表达式不是整数分析:一般是定义数组时数组长度不是整型常量25、error C2059: syntax error : 'xxx'中文对照:(编译错误)‘xxx’语法错误分析:引起错误的原因很多,可能多加或少加了符号xxx26、error C2064: term does not evaluate to a function中文对照:(编译错误)无法识别函数语言分析:1、函数参数有误,表达式可能不正确,例如“sqrt(s(s-a)(s-b)(s-c));”中表达式不正确2、变量与函数重名或该标识符不是函数,例如“int i,j; j=i();”中i不是函数27、error C2065: 'xxx' : undeclared identifier中文对照:(编译错误)未定义的标识符xxx分析:1、如果xxx为cout、cin、scanf、printf、sqrt等,则程序中包含头文件有误2、未定义变量、数组、函数原型等,注意拼写错误或区分大小写。
gcc 常见的编译警告与错误(按字母顺序排列)C语言初学者遇到的最大问题往往是看不懂编译错误,进而不知如何修改程序。
有鉴于此,本附录罗列了用gcc编译程序时经常出现的编译警告与错误。
需要提醒读者的是,出现警告(warning)并不影响目标程序的生成,但出现错误(error)则无法生成目标程序。
为便于读者查阅,下面列出了经常遇到的警告与错误,给出了中英文对照(英文按字典顺序排列),并对部分错误与警告做了必要的解释。
#%s expects \FILENAME\ or …#%s 需要\FILENAME\ 或…#%s is a deprecated GCC extension#%s 是一个已过时的GCC 扩展#%s is a GCC extension#%s 是一个GCC 扩展#~ error:#~ 错误:#~ In file included from %s:%u#~ 在包含自%s:%u 的文件中#~ internal error:#~ 内部错误:#~ no newline at end of file#~ 文件未以空白行结束#~ warning:#~ 警告:#elif after #else#elif 出现在#else 后#elif without #if#elif 没有匹配的#if#else after #else#else 出现在#else 后#else without #if#else 没有匹配的#if#endif without #if#endif 没有匹配的#if#include nested too deeply#include 嵌套过深#include_next in primary source file#include_next 出现在主源文件中#pragma %s %s is already registered#pragma %s %s 已经被注册#pragma %s is already registered#pragma %s 已经被注册#pragma once in main file#pragma once 出现在主文件中#pragma system_header ignored outside include file#pragma system_heade 在包含文件外被忽略%.*s is not a valid universal character%.*s 不是一个有效的Unicode 字符%s in preprocessing directive预处理指示中出现%s%s is a block device%s 是一个块设备%s is shorter than expected%s 短于预期%s is too large%s 过大%s with no expression%s 后没有表达式%s: not used because `%.*s’ defined as `%s’ not `%.*s’%s:未使用因为‘%.*s’被定义为‘%s’而非‘%*.s’%s: not used because `%.*s’ is poisoned%s:未使用因为‘%.*s’已被投毒%s: not used because `%.*s’ not def ined%s:未使用因为‘%.*s’未定义%s: not used because `%s’ is defined%s:未使用因为‘%s’已定义%s: not used because `__COUNTER__’ is invalid%s:未使用因为‘__COUNTER__’无效(\%s\ is an alternative token for \%s\ in C++)(在C++ 中“%s”会是“%s”的替代标识符)(this will be reported only once per input file)(此警告为每个输入文件只报告一次)\%s\ after # is not a positive integer# 后的“%s”不是一个正整数\%s\ after #line is not a positive integer#line 后的“%s”不是一个正整数\%s\ cannot be used as a macro name as it is an operator in C++ “%s”不能被用作宏名,因为它是C++ 中的一个操作符\%s\ is not a valid filename“%s”不是一个有效的文件名\%s\ is not defined“%s”未定义\%s\ may not appear in macro parameter list“%s不能出现在宏参数列表中\%s\ re-asserted重断言“%s”\%s\ redefined“%s重定义\/*\ within comment“/*出现在注释中\\x used with no following hex digits\\x 后没有16 进制数字\defined\ cannot be used as a macro name“defined不能被用作宏名__COUNTER__ expanded inside directive with -fdirectives-only带-fdirectives-only 时__COUNTER__ 在指示中扩展__V A_ARGS__ can only appear in the expansion of a C99 variadic macro __V A_ARGS__ 只能出现在C99 可变参数宏的展开中_Pragma takes a parenthesized string literal_Pragma 需要一个括起的字符串字面常量‘%.*s’ is not in NFC‘%.*s’不在NFC 中‘%.*s’ is not in NFKC‘%.*s’不在NFKC 中‘##’ cannot appear at either end of a macro expansion‘##’不能出现在宏展开的两端‘#’ is not followed by a macro parameter‘#’后没有宏参数‘$’ in identifier or number‘$’出现在标识符或数字中‘:’ without preceding ‘?’‘:’前没有‘?’‘?’ without following ‘:’‘?’后没有‘:’'return' with a value, in function returning void在void返回类型的函数中,return返回值。
常见gcc 编译错误整理(开始)1
1 error: expected expression before 'else'
else之前无表达式。
2 error: lvalue required as left operand of assignment
左值问题。
3 error: invalid storage class for function 'XXXXXX'
在文件的某个地方,丢失了一个大括号‘}’。
常见gcc编译警告整理(开始)
1、warning: no newline at end of file
在文件最后一行加上回车键
解释:在《Rationale for the C99 standard》一文中,有C99的相关信息:
A backslash immediately before a newline has long been used to continue string literals, as well as preprocessing command lines. In the interest of easing machine generation of C, and of transporting code to machines with restrictive physical line lengths, the C89 Committee generalized this mechanism to permit any token to be continued by interposing a
backslash/newline sequence.
c/c++代码的每一行后面有一个“结束符”,也就是newline。
避免当被include的文件展开后,前一个文件的最后一行与后一个文件的第一行直接被连接成一行从而造成错误。
2、warning: comparison between pointer and integer
解释:integer与pointer比较
3、 warning: assignment discards qualifiers from pointer target type
解释:赋值时,取消了右值的限定。
4、 warning: passing argument 1 of 'send' makes pointer from integer without a cast
解释:函数send的第一个integer型参数没有强制转换为pointer型
5、warning: comparison is always true due to limited range of data type
解释:由于数据类型范围的限制,比较结果一直为真。
6、warning: initialization from incompatible pointer type
解释:不兼容指针类型的初始化
7、 warning: return makes pointer from integer without a cast
解释:return使integer转换为pointer,没有加强制类型转换。
8、warning: incompatible implicit declaration of built-in function 'printf'
解释:与内置的printf函数隐士声明不兼容。
9、warning: initialization discards qualifiers from pointer target type
解释:initialization取消了指针目标类型的限定。
10、warning: comparison is always false due to limited range of data type
由于类型限制,比较一直是假
11、warning: assignment from incompatible pointer type
不兼容的指针间赋值
12、warning: passing argument 1 of 'mes_read_time' discards qualifiers from pointer target type12、mes_函数第一个参数的传递,丢弃了指针目标类型限定。
13、warning: "protocol_type" redefined
——type重定义
14、warning: 'return' with a value, in function returning void 在void返回类型的函数中,return返回值。