Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2

下面是c++ 11代码的一个例子:

auto text = std::unique_ptr<char[]>(new char[len]);

Eclipse编辑器抱怨:

Function 'unique_ptr' could not be resolved

Makefile编译工作正常。如何让Eclipse停止抱怨这类错误?


当前回答

Eclipse CDT 4.4 Luna和4.5 Mars的说明

首先,在创建项目之前,配置Eclipse语法解析器:

窗口->首选项-> C/ c++ ->构建->设置->发现-> CDT GCC内置编译器设置

在标题为“命令获取编译器规格”的文本框中添加-std=c++11

现在你可以创建项目,配置取决于你创建的项目类型:

对于创建为:File -> New -> project -> C/ c++ -> c++ project

右键单击创建的项目并打开

属性-> C/ c++构建->设置->工具设置-> GCC c++编译器->方言

将-std=c++11放入标题为“其他方言标志”的文本框中,或从“语言标准”下拉菜单中选择“ISO c++11”。

对于CMake项目

生成eclipse项目文件(在项目内部)

mkdir build
cd build
cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ..

然后将生成的目录作为标准eclipse项目导入eclipse。右键单击项目并打开

属性-> C/ c++通用->预处理器包括路径,Marcos等->提供程序

启用CDT GCC内置编译器设置,并将其移动到贡献路径入口容器之上(这很重要)

最后常用步骤

重新编译,重新生成Project ->C/ c++索引并重新启动Eclipse。

其他回答

我在Mac上用这种方法解决了这个问题。我用Homebrew安装了最新版本的gcc/g++。它们落在/usr/local/bin中,包含在/usr/local/include中。

我CD到/usr/local/bin,做了一个符号链接,从g++@7whatever到g++,因为@位很烦人。

然后我打开MyProject -> Properties -> C/ c++ Build -> Settings -> GCC c++ Compiler并将命令从“g++”更改为“/usr/local/bin/g++”。如果您决定不使用符号链接,则可以更具体。

对链接器执行相同的操作。

应用,应用,关闭。让它重新构建索引。有一段时间,它显示了大量的错误,但我认为那是在建立索引时。当我找出错误时,它们都消失了,没有进一步的操作。


我认为在没有验证的情况下,你也可以进入Eclipse ->属性-> C/ c++ ->核心构建工具链,并编辑那些具有不同路径的工具链,但我不确定这将做什么。

无论是hack版本还是更干净的版本都不能用于Indigo。黑客被忽略,所需的配置选项丢失。没有明显的原因,构建在不能工作后开始工作,并且没有提供任何有用的原因。至少从命令行,我得到了可重复的结果。

我也有几个问题(Ubuntu 13.04 64位,g++-4.8, eclipse Juno 3.8.1, CDT 6.0.0)。上面提到了很多事情,抱歉重复那些,但另外我有问题使用

std::thread

作为c++11的一部分(为链接器添加-pthread可以解决这个问题)。不管怎样,最终这些设置工作正常:

项目->属性-> C/ c++构建->设置->其他。添加

-std=c++11

GCC和g++编译器的标志。单击Apply。

对于链接器,相同的窗口,杂项,链接器标志,添加

-pthread

国旗。共享库设置、共享对象名称、添加

-Wl,--no-as-needed

国旗。单击Apply。

C/ c++通用->路径和符号->符号选项卡,GNU c++选中,添加

__GXX_EXPERIMENTAL_CXX0X__

(没有价值)

国旗。单击Apply。

预处理器包含路径..—>提供商页签:检查

CDT GCC内置编译器设置

对于“命令获取编译器规格”,添加

-std=c++11

国旗。取消共享。单击Apply。

CDT管理构建设置条目,也检查这个。取消另外两个。单击Apply。

回到条目选项卡,GNU c++ CDT管理构建设置条目,您现在应该看到您添加的条目

__GXX_EXPERIMENTAL_CXX0X__

条目。

就是这样。编码时,打字

std::

现在可以自动完成线程类,例如,构建应该工作良好,应该没有

std::system_error'what(): Enable multithreading to use std::thread: Operation not permitted

在运行时。

要在Eclipse Luna中获得对c++ 14的支持,您可以执行以下步骤:

在c++ General ->预处理器Include -> Providers -> CDT Cross GCC内置编译器设置中,添加"-std=c++14" 在c++ Build -> Settings -> Cross g++ Compiler -> Miscellaneous中,添加"-std=c++14"

重新索引项目并最终重新启动Eclipse。它应该像预期的那样工作。

对于最新的(Juno) eclipse cdt,以下对我有效,不需要对自己声明__GXX_EXPERIMENTAL_CXX0X__。这适用于CDT索引器和编译器的参数:

“您的项目名称”->右键单击->属性:

C/ c++通用->预处理器包括路径,宏等->切换到名为“提供商”的选项卡:

对于“配置”,选择“发布”(然后选择“调试”) 关闭所有提供程序,选择“CDT GCC内置编译器设置” 取消勾选“项目间共享设置条目(全局提供者)” 在"Command to get compiler specs:" add "-std=c++11"不带引号(也可以使用引号) 点击应用并关闭选项 重新构建索引

现在所有c++11相关的东西都应该被索引器正确地解析了。

Win7 x64,最新的官方eclipse与CDT 来自sourceforge上mingwbuilds项目的Mingw-w64 GCC 4.7.2