切换到 GCC 4.8 后,Eclipse 未更新 "built-in" Android NDK 项目的包含路径

Eclipse not updating "built-in" include paths for Android NDK Project after switching to GCC 4.8

本文关键字:Android built-in NDK 项目 路径 包含 更新 GCC Eclipse      更新时间:2023-10-16

我有一个使用NDK的Android/Eclipse项目,我最近通过在我的应用程序中添加以下内容来启用c++11支持。可文件:

NDK_TOOLCHAIN_VERSION := 4.8 #same result here with clang
APP_CPPFLAGS += -std=c++11

这基本上工作得很好,c++11特性可用,并按预期编译。这适用于ndk-build和Eclipse构建(只调用nkd-build),但是Eclipse代码解析器现在变得混乱了。当我打开一个使用c++11中添加到STL中的类型的文件(例如std::unique_ptr)时,我会在Problems选项卡中看到红色的曲线和一个错误条目,上面写着Symbol 'unique_ptr' could not be resolved。这并不是很糟糕,但是如果该列表中存在错误,Eclipse将拒绝启动(或调试)应用程序。右键单击#include <memory>行,选择Open Declaration也打开了错误的(4.6)文件。

当检查C/c++ General -> Paths and Symbols -> Includes下的项目属性时,当Show Built-in values被选中时,它仍然列出旧的(4.6)Includes:

这些只是缓存从某个地方,我可以得到它重新生成这些条目?显然,我已经尝试过清理和重建这个项目,但没有效果。如果可以避免,我宁愿不手动添加它们,升级NDK到新版本已经需要相当多的更改,直到它再次编译。这些条目是从哪里生成的,如何触发更新?

我希望我能说我有一个明确的答案给你,因为我自己也一直在与这个问题作斗争,但我确实有一个体面的解决办法。对于初学者来说,"CDT管理构建设置项"下的"内置"项是基于位于jni目录中的Application.mk文件的内容生成的。没有其他方法可以更改它们,这些就是c++透视图的Project Explorer中的"Includes"部分。但是我看到必须阅读NDK安装中的documentation.html才能看到该文件中已经放入了什么。问题就变成了,一旦你改变了什么,或者呼吸太困难,你的包容就会突然地、不可逆转地变得没有解决。解决这个问题的方法是回忆每个包含条目的确切路径,右键单击项目,转到New->Folder,然后在对话框中单击Advanced,并选择Link to Alternate Location (Linked Folder)。然后导航到include文件夹的路径(或者扩展一个变量,如果你喜欢的话),将其重命名为描述性的东西(你不能有4个名为"include"的链接文件夹),然后volil !你突然又有了一个可用的工作空间。我猜"包含"部分功能仍然有点脆弱,至少对于ADT来说,这样做会使包含与实际在项目中的其他文件处于相同的基础上。如果官方认可的机制开始可靠地工作,我会很兴奋,我急切地等待着这样的消息。HTH !