我已将我的Ubuntu升级到11.10,然后Eclipse也升级到了带有CDT 8.0.1的3.7.0 Indigo版本。
接着出现了以下问题:
我已经包含了vector头文件,但编译器仍然提示“无法解析符号'vector'”。我还定义了#define int Comparable
,但是Eclipse还是说“无法解析符号'Comparable'”等等......
尽管出现了很多错误,但编译仍然成功完成!
我试着使用g++编译代码,没有任何问题。
我已将我的Ubuntu升级到11.10,然后Eclipse也升级到了带有CDT 8.0.1的3.7.0 Indigo版本。
接着出现了以下问题:
我已经包含了vector头文件,但编译器仍然提示“无法解析符号'vector'”。我还定义了#define int Comparable
,但是Eclipse还是说“无法解析符号'Comparable'”等等......
尽管出现了很多错误,但编译仍然成功完成!
我试着使用g++编译代码,没有任何问题。
/usr/include/c++/4.6.1
/usr/include/
/usr/include/c++
/usr/include/c++/4.6
/usr/include/x86_64-linux-gnu
/usr/include/asm-generic
/usr/include/c++/4.6.1/x86_64-linux-gnu/
它们可以在项目>属性>C++包含路径
中设置。
据推测,将来CDT的平台专业化将自动包括这些内容。我记得在某个地方读到过这个信息,但无法提供参考资料。
<workspace dir>\.metadata
目录,了解Eclipse在工作区生成和存储的内容。每次添加插件、升级插件或删除插件都会向您的工作区中放置并更改信息。证明这个问题通常出现在升级Eclipse之后。(在我的情况下是Indigo)。清理旧工作区最简单的方法是使用-clean
命令行参数来运行eclipse.exe可执行文件。Eclipse帮助文档告诉我们这个命令的作用:如果设置为"true",则OSGi框架和eclipse运行时使用的任何缓存数据都将被清除。这将清除用于存储包依赖关系分辨率和eclipse扩展注册表数据的缓存。使用此选项将强制eclipse重新初始化这些缓存。
有三种方法可以使用-clean
命令行参数:
-clean
参数的Eclipse可执行文件。步骤3的优点是,您可以保留该脚本并在每次清除工作区时使用它。
这个页面对我很有帮助!希望它也能帮助其他人。
Window > Preferences > C++ General > Code Analysis
前往那裡,取消所有框選來停用它。
我已将索引选项更新为活动构建配置,目前运行正常。
同时,我还从文件列表中删除了一些需要提前索引的文件。
我在这里回答,因为这是最接近我的问题的问题。
我使用了QT Eclipse集成与Helios(3.6.2),没有遇到任何大问题。我使用的是mingw 4.6.2,安装在c:\mingw。我想升级到Indigo,这解决了我在CDT中遇到的一些小问题。
然而,在Indigo(3.7 SR2)下,Eclipse开始将微不足道的函数标记为未解决,例如:
function 'fprintf' could not be resolved
function 'memset' could not be resolved
尽管#include没有下划线,但可以打开,并在标头中包含fprintf。即使代码本身编译得很好。
如果我返回Helios,问题就消失了。
我尝试重新索引,但无济于事。我检查了我的包含路径,它们是:
c:\mingw\include
C:\MinGW\lib\gcc\mingw32\4.6.2\include
起初,我只包含了第一个,但没有包含第二个。然后我搜索了“未解决的包含文件”,发现stdio.h包含了不在mingw主要包含文件夹中的stdarg.h,所以我添加了第二个。但是,printf仍然无法解析,而且没有更多的“未解决的包含文件”。
我创建了一个新的C++项目,其中包含一个类。我添加了上面的路径和stdio.h,并调用了fprintf。它被下划线标记了!即使其他来自stdio的东西没有被下划线标记。
现在我知道这不仅仅是Qt的问题。
我在这个问题上做了一段时间的工作,直到我读到这里底部的帖子建议删除包含路径并进行编译。我不相信它会奏效,但还是试了一下。令人惊讶的是,尽管编译失败了,错误却消失了!
那时我再次查看了包含路径。它们已经被编译步骤更新为以下内容:
c:/mingw/lib/gcc/mingw32/4.6.2/include-fixed
c:/mingw/include
c:/mingw/lib/gcc/mingw32/4.6.2/include
c:/mingw/lib/gcc/mingw32/4.6.2/include/c++/backward
c:/mingw/lib/gcc/mingw32/4.6.2/include/c++/mingw32
c:/mingw/lib/gcc/mingw32/4.6.2/include/c++
这些被标记为“内置”值,我认为意味着它们不是由我添加的,并且下次进行构建时可能会更新。
所以,我想教训是,即使Eclipse没有将其视为未解决的包含文件,也要包括mingw下的每个包含路径。
下一步是将所有这些路径放入我的Qt项目中。不幸的是,在这样做后,未解决的函数仍然存在。这似乎是Qt C/C++包含路径与CDT C/C++包含路径不同的某种bug。
好的,这是对我有用的方法:
从包含路径中删除我创建的头文件的路径
编译项目(显然编译器会抱怨缺少用户定义的头文件)
重新插入我创建的头文件的路径
再次编译项目 - 完美地工作了
我无法解释这个情况 :(