首页 文章

如何在Eclipse CDT中启用C 11 / C 0x支持?

提问于
浏览
207

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停止抱怨这些错误?

16 回答

  • 3

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

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

    C / C常规 - >预处理器包括路径,宏等 - >切换到名为“Providers”的选项卡:

    • 为“配置”选择“发布”(以及之后的“调试”)

    • 关闭所有提供程序,只需选择“CDT GCC内置编译器设置”

    • 取消选中“在项目之间共享设置条目(全局提供者)”

    • 在“获取编译器规范的命令:”中添加“-std = c 11”,不带引号(可以使用报价也是)

    • 点击应用并关闭选项

    • 重建索引

    现在所有与c 11相关的东西都应该由索引器正确解析 .

    win7 x64,来自sourceforge的mingwbuilds项目的cdt mingw-w64 gcc 4.7.2的最新官方日食

  • 20

    我在Eclipse Juno上遇到了同样的问题 . 这些步骤解决了这个问题:

    • 转到 Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols] .

    • 添加符号: __cplusplus ,其值为 201103L

  • 110

    我在Eclipse论坛上发现了this文章,只是遵循了这些步骤,它对我有用 . 我在Windows上使用Eclipse Indigo 20110615-0604并使用Cygwin设置 .

    • 制作一个新的C项目

    • 所有内容的默认选项

    • 创建后,右键单击项目并转到"Properties"

    • C / C Build - > Settings - > Tool Settings - > GCC C Compiler - > Miscellaneous - > Other Flags . 把 -std=c++0x (或者更新的编译器版本 -std=c++11 放在最后....而不是GCC C编译器我也有Cygwin编译器

    • C / C一般 - >路径和符号 - >符号 - > GNU C.单击"Add..."并粘贴 __GXX_EXPERIMENTAL_CXX0X__ (确保将两个下划线附加并添加前缀)到"Name"中,并将"Value"留空 .

    • 点击应用,做任何要求你做的事,然后按OK .

    现在,Eclipse FAQ中也有对此的描述:Eclipse FAQ/C++11 Features .

    Eclipse image setting

  • 0

    Eclipse CDT 4.4 Luna和4.5 Mars的说明

    First, before creating project, configure Eclipse syntax parser:

    Window - > Preferences - > C/C++ - > Build - > Settings - > Discovery - > CDT GCC Build-in Compiler Settings

    在 Headers 为 Command to get compiler specs 的文本框中追加 -std=c++11

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

    For project created as: File -> New -> Project -> C/C++ -> C++ Project

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

    Properties - > C/C++ Build - > Settings - > Tool Settings - > GCC C++ Compiler - > Dialect

    -std=c++11 放入名为 other dialect flags 的文本框中,或从 Language standard 下拉列表中选择 ISO C++11 .

    For CMake project

    生成eclipse项目文件(在项目中)

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

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

    Properties - > C/C++ General - > Preprocessor Include Paths, Marcos etc. - > Providers

    启用 CDT GCC Build-in Compiler Settings 并将其移动到高于 Contributed PathEntry Containers (这很重要)

    Last Common Step

    重新编译,重新生成 Project - > C/C++ Index 并重启Eclipse .

  • 146

    Update 2016:

    gcc 6changes)开始,默认的C语言是C 14.这意味着除非您明确需要比新语言更新或更旧的方言,否则您不再需要对eclipse做任何事情 .

    对于月神和火星

    这个社区维基部分包含了Trismegistos的答案;

    1. Before creating project, configure Eclipse syntax parser:

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

    在 Headers 为命令的文本框中获取编译器规格追加 -std=c++14 2. Create project, configuration depends on what kind of project you created:

    对于创建的项目:文件 - >新建 - >项目 - > C / C - > C项目

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

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

    -std=c++14 放入 Headers 为其他方言标志的文本框中,或从语言标准下拉列表中选择ISO C 11 .

    现在有一种新方法可以在没有GXX_EXPERIMENTAL黑客的情况下解决这个问题 .

    For most recent versions :(目前Juno和Kepler Luna ):

    在较新版本的Juno下,设置位于 Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings () .

    Older versions 2012/2013:

    • 在C / C Build下(在项目设置下),找到 Preprocessor Include Path并转到 Providers Tab . 取消选择除CDT GCC内置编译器设置之外的所有内容 . 然后取消标记共享设置条目.... Add the option -std=c++11 到名为Command的文本框中以获取编译器规范 .

    • 转到路径和符号 . 在符号下,单击 restore defaults ,然后应用 .


    笔记:

    Eclipse对于应用程序非常挑剔,每次离开设置选项卡时都需要执行此操作 .

    [自我推销]:我根据上述内容编写了自己更详细的说明 . http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds

    感谢用户 Nobody at https://stackoverflow.com/a/13635080/1149664

  • 0

    对于Eclipse CDT开普勒,对我来说摆脱 std::thread 未解决的符号是:

    • 转到首选项 - > C / C - >构建 - >设置

    • 选择“发现”选项卡

    • 选择CDT GCC内置编译器设置[共享]

    • 将-std = c 11添加到“获取编译器规范的命令:”字段,例如:

    $ -E -P -v -dD -std = c 11 $

    • Ok和项目的重建索引 .

    -std=c++11 添加到项目 Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other 标志对于开普勒来说还不够,但对于Helios这样的旧版本来说已经足够了 .

  • 5

    我还不能发表评论,所以我正在写自己的答案:

    它与 __GXX_EXPERIMENTAL_CXX0X__ 有关,它对Eclipse Juno和CDT 8.x有效 .

    这个答案的某些部分已经在其他答案中有所涉及,但我希望它是连贯的 .

    为了能够使用stdc 11进行构建,必须为编译器添加特定的标志 . 您可以通过项目属性执行此操作 . 修改项目属性 RMBProject propertiesALT + ENTER . 然后C / C Build - > Settings - > Tool Settings - > GCC C Compiler - > Miscellaneous - > Other Flags . 将-std = c 11放在行尾,对于GCC,它看起来像: -c -fmessage-length=0 -std=c++11 . 通过添加-stdc 11标志编译器(GCC)将自己声明 __GXX_EXPERIMENTAL_CXX0X__ .

    此时,您可以使用C 11的所有优点来构建项目 .

    问题是Eclipse有它's own parser to check for errors - that'为什么你仍然在Eclipse编辑器中得到所有令人讨厌的错误,同时你可以在没有任何东西的情况下构建和运行项目 . 有一种方法可以通过为项目明确声明 __GXX_EXPERIMENTAL_CXX0X__ 标志来解决这个问题,可以这样做(就像Carsten Greiner所说的那样):C / C General - > Paths and Symbols - > Symbols - > GNU C.单击"Add..."并过去 __GXX_EXPERIMENTAL_CXX0X__ (确保将两个下划线附加并添加前缀)到"Name"并将"Value"留空 . 现在是我想要在第一个答案的评论中添加的额外部分,请转到:C / C常规 - >预处理器包含路径宏等 - >提供商,然后选择 CDT Managed Build Setting Entries 然后单击“应用”并返回“条目”选项卡,在GNU C现在应该有CDT托管构建设置条目检查是否在内部定义了 __GXX_EXPERIMENTAL_CXX0X__ 如果是 - > APPLY和重建索引你此时应该没问题 .

  • 1

    我也有几个问题(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编译器的标志 . 单击“应用”

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

    -pthread
    

    旗 . 共享库设置,共享对象名称,添加

    -Wl,--no-as-needed
    

    国旗也是 . 单击“应用”

    C / C一般 - >路径和符号 - >符号选择TAB,GNU C,添加

    __GXX_EXPERIMENTAL_CXX0X__
    

    (没有 Value )

    旗 . 单击“应用”

    C / C常规 - >预处理器包含路径.. - >提供者选项卡:检查

    CDT GCC内置编译器设置

    并为“命令获取编译器规范”,添加

    -std=c++11
    

    旗 . 取消选中共享 . 单击“应用”

    CDT管理构建设置条目,也请检查 . 取消选中其他两个 . 单击“应用”

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

    __GXX_EXPERIMENTAL_CXX0X__
    

    条目 .

    而已 . 编码时,打字

    std::
    

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

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

    在运行时 .

  • 0

    我不知道是不是只有我,排名最高的解决方案对我不起作用,我的eclipse版本只是在Ubuntu中使用sudo apt-get install eclipse安装的普通eclipse平台但是我找到了一个采用方法的解决方案从排名最高的解决方案和第二个解决方案中,我所做的工作如下所述(请注意,为简单起见,忽略了创建C项目等其他步骤)

    一旦你创建了C项目

    (1)C / C一般 - >路径和符号 - >符号 - > GNU C.单击"Add..."并粘贴 GXX_EXPERIMENTAL_CXX0X (确保追加并添加两个下划线)到"Name"并将"Value"留空 .

    (2)在C / C Build下(在项目设置下),找到Preprocessor Include Path并转到Providers选项卡 . 取消选择除CDT GCC内置编译器设置之外的所有内容 . 然后取消标记共享设置条目....将选项-std = c 11添加到名为Command的文本框中以获取编译器规范

    在执行了上面2和2之后的步骤,它的工作原理,eclipse能够解析unique_ptr,我不知道为什么这个解决方案有效,希望它可以帮助人们 .

  • 15

    即使您已在文件中包含C 11内存头,Eclipse C / C也无法识别符号 std::unique_ptr .

    假设您正在使用GNU C编译器,这就是我要解决的问题:

    项目 - >属性 - > C / C常规 - >预处理器包含路径 - > GNU C - > CDT用户设置条目

    • 单击“添加...”按钮

    • 从下拉菜单中选择“预处理器宏”

    Name: __cplusplus     Value:  201103L
    
    • 点击应用,然后确定返回项目

    • 然后重建你C索引:项目 - > C / C索引 - >重建

  • 0

    对我来说 Eclipse Neon 我跟着Trismegistos answer here above,我也增加了一个额外的步骤:

    • 转到项目 - >属性 - > C常规 - >预处理器包括路径,宏等 - >提供程序 - > CDT交叉GCC内置编译器设置,附加标志 "-std=c++11"

    点击申请即可 .

    干杯,

    盖伊 .

  • 1
    • 右键单击该项目并转到"Properties"

    • C / C Build - > Settings - > Tool Settings - > GCC C Compiler - > Miscellaneous - > Other Flags . 把-lm放在其他标志文本框的末尾,然后单击确定 .

  • 0

    黑客和清洁版都不适用于Indigo . 黑客被忽略,并且缺少必需的配置选项 . 由于没有明显的原因,构建在不工作之后开始工作,并没有提供任何有用的理由 . 至少从命令行,我得到可重现的结果 .

  • 11

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

    • C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings 中,添加"-std=c++14"

    • C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous 中,添加"-std=c++14"

    重新编译项目并最终重启Eclipse . 它应该按预期工作 .

  • 2

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

    我将CD放入/ usr / local / bin并从g @ 7做了一个符号链接,只是为了导致@位烦人 .

    然后我转到MyProject - >属性 - > C / C构建 - >设置 - > GCC C编译器,并将命令从“g”更改为“/ usr / local / bin / g” . 如果您决定不进行符号链接,则可以更具体 .

    为链接器做同样的事情 .

    申请并申请并关闭 . 让它重建索引 . 有一段时间,它显示了令人畏惧的错误数量,但我认为这是在构建索引时 . 当我弄清楚错误时,他们都没有采取进一步行动就消失了 .


    我想如果不验证你也可以进入Eclipse - >属性 - > C / C - >核心构建工具链并编辑具有不同路径的那些,但我不确定它会做什么 .

  • 220

    我使用Eclipse C 2019-03对使用std :: optional和std :: swap的混合C和C项目有类似的问题 . 对我有用的是这个 . 在项目属性 - > C / C构建 - >设置 - >工具设置 - >交叉G编译器中,删除-std = gnu 17表格杂项并将其放入方言 - >其他方言标志中 .

相关问题