在Android NDK中使用STL时,Eclipse索引器错误

Eclipse indexer errors when using STL with Android NDK

本文关键字:Eclipse 索引 错误 STL NDK Android      更新时间:2023-10-16

我在Ubuntu上使用带有eclipse Indigo的Android NDK r7。我将我的java项目设置为使用C++特性。我在C++端使用STL,所以我添加了

APP_STL := gnustl_static

在Application.mk文件中。

ndk构建成功编译了我的代码并创建了一个共享对象。

然而eclipse索引器抱怨缺少STL符号。例如

"无法解析方法"push_back""无法解析符号"vector"被解决"

只有当C++文件在编辑器中打开时才会发生这种情况。最终eclipse不会创建我的apk。我添加了与ndk一起发送的gnu STL头文件的路径(Properties=>C/C++General=>Code Analysis=>path&symbols):

android-ndk-r7/sources/cxx-stl/gnu-libstdc++/include
android-ndk-r7/sources/cxx-stl/gnu-libstdc++/include/bits

当前的解决方法是关闭打开的C++文件以使eclipse满意。

有趣的是,eclipse索引器可以很好地处理中的头文件

android-ndk-r7/platforms/android-14/arch-arm/usr/include

有什么东西我忘了在eclipse中设置吗?

您必须将STL的路径添加到项目设置中,以便Eclipse也对其进行索引。项目->属性->C/C++常规->包含。以下是我添加的内容:

<path_to_NDK>/sources/cxx-stl/gnu-libstdc++/include
<path_to_NDK>/sources/cxx-stl/gnu-libstdc++/libs/armeabi-v7a/include
<path_to_NDK>/platforms/android-9/arch-arm/usr/include

有些人已经能够通过将__GXX_EXPERIMENTAL_CXX0X__添加到Eclipse来解决这个问题,如"智能指针不适用于Android NDK r8"中所述。但这在Eclipse的某些版本中不起作用,比如我的版本(Eclipse Juno v4.2)

因此,作为一个变通的黑客,我去了Eclipse Preferences->C/C++->Code Analysis,然后我将一些问题的严重性从Error更改为Warning,因为我无论如何都在使用NDK编译我的代码,所以这些只会影响Indexer。我更改了"Symbol is not resolve",它修复了我的错误,但您可能还想更改其他一些错误。起初它并没有为我修复错误,直到我关闭&重新打开C++文件。右键点击你的项目并选择"索引->重建"也可能有助于刷新它

现在Eclipse将这些行突出显示为警告,并允许我继续构建&运行&调试我的NDK应用程序。