【问题标题】:Eclipse CDT indexer does not know C++11 containersEclipse CDT 索引器不知道 C++11 容器
【发布时间】:2013-06-12 11:25:02
【问题描述】:

我在 Eclipse CDT 中配置了一个 C++11 项目以使用 gcc-4.7。它不是我系统上的默认编译器,它不支持 C++11。为了使编译工作,我需要传递标志 -std=c++11 并且还包括以下标头路径:/usr/local/Cellar/gcc/4.7.2/gcc/include/c++/4.7.2

每当我使用像 std::unordered_setstd::unordered_map 这样的 C++11 容器类型时,CDT 索引器都会抱怨:Symbol unordered_set could not be resolved。如何告诉索引器正确解析这些符号?

这就是我配置索引器的方式:

据我了解设置,索引器应该使用当前活动构建配置中的编译器设置。编译工作正常,为什么不索引呢?

【问题讨论】:

    标签: eclipse c++11 build indexer


    【解决方案1】:

    设置 **__GXX_EXPERIMENTAL_CXX0X__** 对我没有帮助(2014 年 7 月,Eclipse Kepler 20130919,Ubuntu 12.04)。

    要修复 C++11 语法高亮,请转到:

    项目属性 --> C/C++ 常规 --> 路径和符号 --> 符号 --> GNU C++

    并覆盖符号(即添加新符号):

    __cplusplus
    

    有价值

    201103L
    

    更新:如果您使用较新版本的 Eclispe(截至 2016 年)并且仍然遇到同样的问题,请尝试 value(如 jose.diego 所指出的):

    201402L
    

    确保在项目设置中启用了索引器(C/C++ 通用 --> 索引器

    然后重新索引(Project --> C/C++ Index --> Rebuild

    如果问题仍然存在,请再次重新索引。它现在应该可以工作了。

    【讨论】:

    • 虽然它适用于普通的 helloworlds,但它不适用于 makefile 项目。有什么建议吗?
    • 也为我解决了,设置 GXX_EXPERIMENTAL_CXX0X 对我也不起作用
    • @nitrocaster 请参阅我测试过的stackoverflow.com/a/24628885/52074,它也适用于 makefile 项目。
    • 也为我工作。只添加了一个值为 201103L 的 __cplusplus 符号。我不需要执行启用索引器步骤。以前,设置 GXX_EXPERIMENTAL_CXX0X 对我也不起作用
    • 将 __cplusplus 设置为 201402L 是解决我在 Eclipse Mars2 中的问题的唯一方法
    【解决方案2】:

    经过一番幸运的谷歌搜索,我最近解决了这个问题。

    单击您的项目并右键单击->属性

    选择“C/C++常规->处理器包含路径、宏等...”

    选择“提供者”标签

    取消选择所有除了“CDT用户设置条目”和“CDT GCC内置编译器设置”

    点击“CDT GCC内置编译器设置”

    取消选择“使用项目之间共享的全局提供程序”

    编辑底部标有“获取编译器规范的命令”的框

    插入到命令 -std=c++11 中,看起来像这样:

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

    点击应用并确定。

    这对我有用。您可能需要重新索引项目。

    【讨论】:

    • re - “可能需要重新索引”:我的测试显示“你必须重新索引”
    • 我用 makefile 项目测试了这个,这个解决方案有效。
    • 我只需将GCC Built-int Compiller Settings 移至此列表的最顶部就足够了
    • 您也可以将其设置为工作区配置,以便在所有新项目中启用 C++11。
    • 非常感谢,只有真正有效的步骤工作列表
    【解决方案3】:

    如本论坛帖子所述:

    http://www.eclipse.org/forums/index.php/mv/msg/282618/

    • 右键单击项目并转到“属性”C/C++ 常规 -> 路径 和符号 -> 符号 -> GNU C++。
    • 点击“添加...”并将__GXX_EXPERIMENTAL_CXX0X__粘贴到“名称”中,然后 将“价值”留空。点击应用,做它要求你做的任何事情,然后 点击确定。

    【讨论】:

    • 这个答案是正确的,是旧版本。但是继续前进(使用较新版本的 Eclipse)@selyuni 的答案有效。尝试曾经是正确解决方案的答案只是浪费时间。也许 SOF 可以改变政策,将更多赞成的答案放在首位,而不仅仅是正确的答案。 :-)
    • @VikasGoel:这取决于 Eclipse 版本,还是编译器/库版本,或两者兼而有之?
    • @einpoklum - 仅限 Eclipse 版本
    【解决方案4】:

    或前往:

    • C/C++ 构建->发现选项->GCC C++ 编译器

    • 将您的标志添加到编译器调用参数。比如 -std=c++11 -m32

    • 立即清除发现的条目:点击清除

    • 重建项目

    之后,所有符号都将更新为正确的值,并且索引器应按预期工作

    【讨论】:

    • 这解决了我的问题。请注意,在 Eclipse Kepler 上,它是首选项 -> C/C++ -> 构建 -> 设置 -> 发现选项卡。此处的 eclipse 社区论坛上也提到了它:eclipse.org/forums/index.php/mv/msg/373462/909018/#msg_909018。真的很不直观,很难找到!
    • m32 只是为了表明您可以添加任何您喜欢的参数。例如,Windows 标头在 32 位和 64 位之间存在显着差异。因此,如果在默认使用 64 位模式的编译器上构建 32 位应用程序,则添加 -m32 以便索引器知道这一点并解析正确的标头
    • 发现选项卡似乎在 eclipse mars 中消失了。
    • 发现选项已被弃用,不再出现在菜单中。 Eclipse help documents it here.
    【解决方案5】:

    对我来说,使用外部构建器的项目的解决方法是定义符号:

    __cplusplus

    与价值:

    201403

    在项目的:路径和符号 -> 符号/GNU C++ 中。

    这在 eclipse Kepler CDT 版本:8.3.0.201402142303 中有效。

    【讨论】:

    • 为我工作(使用自定义 Makefile)。
    【解决方案6】:

    this guide:

    1. C/C++ 构建->设置->GCC C++ 编译器->方言
    2. 在“语言标准”中选择“ISO C++11 (-std=c++0x)”
    3. 申请并确定
    4. 重建项目,它可以工作了:)

    【讨论】:

      【解决方案7】:

      以下适用于Eclipse C/C++ Oxygen.2 和gcc-5.5.0

      Eclipse Properties->C/C++ Build->Settings->GCC C++ Compiler->Dialect->Other dialect flags: -std=c++17

      不要在Language standard 下拉列表中选择任何内容。

      【讨论】:

        【解决方案8】:

        以下配置可帮助我解决原始问题中指出的问题。

        环境: Eclipse(Oxygen.3a 版本(4.7.3a)),Cygwin64。 如果你有不同版本的 Cygwin,你可以找到类似的目录,如下所示。

        第 1 步:确保您有以下两个目录:

           C:\cygwin64\lib\gcc\x86_64-pc-cygwin\7.4.0\include
           C:\cygwin64\lib\gcc\x86_64-pc-cygwin\7.4.0\include\c++
        

        如果您没有看到以上两个目录,请启动您的 Cygwin 安装程序并安装 gcc-core、gcc-g++ 和 libgcc1。

        第 2 步:如果您没有看到以上两个包含目录,请将目录 C:\cygwin64\lib\gcc\x86_64-pc-cygwin\7.4.0\include 复制到 C:\cygwin64\usr

        第 3 步:转到项目属性->C/C++ 常规->路径和符号 确保您可以看到列出了以下两条路径

           C:\cygwin64\usr\include
           C:\cygwin64\usr\include\c++
        

        第四步:属性->C/C++ Build/Settings/选择Cygwin PE Parser

        第五步:属性->C/C++ Build/Tool Chain Editor 选择Cygwin GCC

        第六步:Property->C/C++ General/Indexer选择Enable indexer

        第 7 步:项目->C/C++ 索引->重建

        现在你的 Eclipse 应该可以看到 C++11 类型了。

        【讨论】:

          猜你喜欢
          • 2012-11-18
          • 1970-01-01
          • 2012-06-04
          • 1970-01-01
          • 2019-07-17
          • 2013-10-29
          相关资源
          最近更新 更多