c ++ 11代码在Eclipse中生成语义错误,无法更改构建设置

时间:2014-03-25 18:47:59

标签: eclipse c++11 android-ndk settings eclipse-cdt

我在Eclipse CDT中遇到c ++ 11代码问题。代码编译很好,但在编辑器中我看到所有对c ++ 11标准库的引用(例如std :: shared_ptr和std :: chrono :: milliseconds)都被发现服务/索引器标记为错误,这可以防止程序从运行。找到包含文件,但我认为正确的标记和宏不会传播到CDT的内部检查,因此没有定义标题的类型或主要内容。我似乎也无法更改项目属性中的相应设置。

我浏览了其他描述类似问题和可能修复的帖子,例如:

某些解决方案通过禁用索引器或禁用特定错误/警告来掩盖问题,但这不可取,因为我希望在发生错误时看到真正的错误。

其他(可能更正确)的解决方案描述了如何通过适当的宏(例如,__ GXX_EXPERIMENTAL_CXX0X__)和构建标志(例如,-std = c ++ 11),但这里我认为是主要问题:我无法在IDE中更改这些设置。在"项目 - >属性 - > C / C ++一般 - >预处理器包括路径,宏等",条目和提供程序选项卡显示为灰色/禁用。同样,在"项目 - >属性 - > C / C ++ Build - >设置",其他一些帖子中没有提到工具设置或发现的标签。

一些细节:我在Ubuntu 13.10 x64上使用Kepler build 20140224-0627。我尝试使用的代码是Android NDK(最新版本,r9d),我安装了Google的NDK插件。编译器是gcc 4.8,并使用gnustl_static运行时库。也许使用NDK工具链/插件会禁用我需要修改的设置?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

首先,确保您的项目正确编译。

之后,转到 C / C ++ Build - &gt; 工具链编辑器并选择当前工具链: Linux GCC < / em>(您可能需要关闭仅显示兼容的工具链)。确保当前构建器仍然是 Android Builder

现在您可以完全访问 C / C ++常规 - &gt; 路径和符号页面, h包含 #符号 标签。

在这两个标签上,我手动添加

C:/Android/android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.6/include
C:/Android/android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/include
C:/Android/android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.6/include/backward

__GXX_EXPERIMENTAL_CXX0X__ = 1

也许您需要切换到 C / C ++ Perspective ,右键单击该项目并启动 Index - &gt; Rebuild 。< / p>

答案 1 :(得分:0)

我在这里有两个贡献:

  1. 如果可以,请更新Eclipse。他们偶尔解决问题:)
  2. 生成解析器日志文件。
  3. 第一个是不言自明的,但我发现我的Eclipse配置没有配置更新站点,所以我不得不绕道而行。

    第二个隐藏在项目菜单中的普通站点中。 Mars中的Indexing菜单(Project / C-C ++ Index)具有&#34; Create Parser Log File&#34;。此命令生成一个日志,该日志与索引器解析当前&#34;当前&#34;在编辑器中(即你现在可以看到红色波浪形的那个)。生成该日志,它将在编辑器选项卡中自动打开。如果索引器有错误,它可能会在此日志中报告一些有趣的内容。在我的例子中,它显示了一些诸如<memory>之类的标题未被解析。这当然也是它的表现方式。这是在日志底部报告的,低于有关成功解析的所有信息。这使我能够将我的调查重点放在寻找错误而不是配置错误或数据库损坏上。幸运的是,影响我的错误是在较新版本的火星中修复的。