加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

GCC编译器版本太高的问题

(2011-05-19 10:27:33)
标签:

头文件

代码

环境

函数

it

分类: 计算机
昨天一同事把代码准备重新全新布置到新的环境上去的时候,代码报错了,先开始报错如下:
 error: ‘memset’ was not declared in this scope
 error: ‘strcat’ was not declared in this scope
首先想到的肯定是头文件未包含进来。但不可能,因为这套代码已经在其它环境上编译过N次啦,不可能代码里面没有添加对头文件的包含啊。
于是想到是否是因为新环境里面include目录下没有对应的头文件呢?还或是include目录在这个环境下变了呢?不是/usr/include下面啦。
经过一查,上面两个都不是。
这个时候就有点郁闷啦。把环境按以前的都设置一遍,还是一样。没办法啦。只好放今天来重新查查啦。
今天早上来,可能时间也比较充足,所以慢慢来。既然报这个错误,那我把这个头文件再添加到.h代码里面呢?
然后发现添加一个,某个错误就能编译过去。看来还真是头文件的问题。

但接下来还有其他几个警告,如下:
test.cpp:213: warning: ignoring return value of ‘int system(const char*)’, declared with attribute warn_unused_result
test.cpp: In member function ‘int test::load(std::string&)’:
test.cpp:58: warning: deprecated conversion from string constant to ‘char*’
test.cpp:58: warning: deprecated conversion from string constant to ‘char*’
test.cpp:58: warning: deprecated conversion from string constant to ‘char*’
test.cpp:58: warning: deprecated conversion from string constant to ‘char*’
test.cpp:58: warning: deprecated conversion from string constant to ‘char*’
test.cpp:94: warning: suggest explicit braces to avoid ambiguous ‘else’
test.cpp:61: warning: ignoring return value of ‘int pipe(int*)’, declared with attribute warn_unused_result

居然这些还报,一一为这些没有判断函数返回值的作了修改。编译通过。

然后就想为什么这个系统要求这么严格呢?查一下GCC的版本,如下:
以前旧环境:
gcc 版本 4.1.2 20070626 (Red Hat 4.1.2-14)
现在的新环境:
gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5) 

原来是GCC版本不同。所以想GCC新版本对代码的这些要求现在越来越严格啦。还有函数的一些检查项,还有编译时候MAKEFILE里面对库文件的引用。
具体是否是因为这个严格的原因,没有去详细查GCC的文档。但猜想是这样吧。

以后如果代码里面对某个函数的头文件还是尽量包含进来吧,至少不是什么坏事。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有