Eclipse找不到标准C++库

3

我有一台安装了mingw的Windows8机器,路径是c:\mingw。Eclipse可以成功编译程序,但它会将本来可以编译通过的代码行视为错误。同时,Eclipse无法自己找到所需的库。

当我在Eclipse中使用CDT组件第一次构建项目时,每个#include语句和使用对象的每一行都会显示错误。

例如:

#include <iostream>
using namespace std;

int main() {
  cout << "hello\n";
}

上述代码中,包含、使用和cout<<行都出现了错误。我可以通过点击project->properties C++/General Preprocessor Include来消除这些错误。然后在providers选项卡上,我可以选中"CDT Build output parser"并按照下面第一个答案所述修复错误,我正在点赞这个答案。但是这只适用于项目。我必须每次都这样做。如何让Eclipse在构建新项目时简单地接受标准C++而无需重新配置每个项目?
我已经成功解决了包含错误,方法是进入项目设置并添加以下目录:
c:/bin/mingw/lib/gcc/include ...
但是对象使用的行仍有错误。
#include <iostream>
#include <string>
#include <regex>
using namespace std;

int main() {
    string s = "this is a test.";
    regex e("est");
    smatch m;

尽管代码编译成功并且已经识别了regex include,但使用正则表达式的那一行仍然显示错误:“类型regex无法解析”。

此外,运行Windows 8.1和Mingw的另一台机器上,Eclipse无法进行调试。是否有关于如何将Eclipse CDT连接到库的文档?

3个回答

5

虽然你显然能够在Eclipse中成功地使用gcc编译代码,但Eclipse有自己内置的C++解析器,你需要单独让它知道你正在使用C++11。

项目属性 -> C/C++常规 -> 预处理器包含路径下的CDT GCC内置编译器设置中添加-std=c++11选项,编译器规格应该类似于这样:

${COMMAND} -E -P -v -dD ${INPUTS} -std=c++11 

更新。 请阅读 为C/C++ Indexer设置包含路径和宏定义,以了解CDT自动发现支持工具链的包含路径和预处理器符号(也称为Scanner Discovery)对您的适用性。

要点是CDT使用语言设置提供程序来查找包含路径和预处理器符号。并且语言设置提供程序可以在项目属性页面“预处理器包含路径、宏等”上进行配置。

一旦您拥有正确的设置,您可以将其制作成模板工作区,并将模板工作区复制到新项目中,或者使用脚本仅设置相关设置。还可参见:为所有Eclipse工作区设置首选项


也许我应该举一个不使用C++11的例子。我使用更平凡的对象,如cout,也会出现这些错误! - Dov
我修改了问题以使其更清晰。你的回答让我有了一个部分答案:我可以编辑项目以识别头文件,但为什么每次都要这样做呢?我希望Eclipse每次都能识别标准的东西(忘记C++11)。我不应该需要点击进入项目设置才能让它识别#include <iostream>。 - Dov

0

我曾经遇到过同样的问题。Eclipse将正则表达式关键字标记为错误,但项目却没有出现错误。我在属性->C/C++构建->GCC C++编译器->方言语言标准中选择了一个语言方言作为"ISO C++1y (-std=c++1y)"。


0

已经有一段时间了,但是我还是想分享我的答案,以便其他人也能找到。

我遇到了一个看起来像这个问题的问题,但事实证明虽然我已经安装了MinGW,但eclipse仍然希望我安装cygwin。请转到项目属性 > C/C++构建 > 工具链编辑器 > 当前工具链,并选择适当的选项。 不确定为什么它默认将设置为无法找到的工具链。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接