Eclipse-CDT无法在NDK项目中findstdlib符号

我正在尝试使用NDK和C ++编写一个简单的Android应用程序。 具体来说,我想使用最新版本的NDK(r7)中包含的gnustdc ++。 JNI库已经编译完美,并且与C一起工作得很好,但是现在我试图介绍C ++,我遇到了一些问题。

我在项目的包含path中添加了${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/include/ ,并且#includes内联已parsing。 但是,尝试实际使用任何STL类(如vector )导致Symbol 'vector' could not be resolved

<stdlib.h>导入的所有标准C符号也是如此,直到我尝试用<cstdlib>replace#include 。 然后它失败与Function 'malloc' could not be resolved等等。

奇怪的是,添加stlport头( ${NDK_ROOT}/sources/cxx-stl/stlport/stlport )修复了我所有的问题。 但是我使用的是GNU C ++而不是STLPort,所以这是一个不方便和不恰当的“解决scheme”。 这些标题看起来很奇怪,但其他标题却不行。 Eclipse是否无法索引或parsingGNU C ++头文件?

Android.mk

 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libfoobar-jni LOCAL_SRC_FILES := foobar.cpp LOCAL_LDLIBS := -llog -lGLESv2 LOCAL_C_INCLUDES := sources/cxx-stl/gnu-libstdc++/include/ LOCAL_CFLAGS := -g -std=c99 include $(BUILD_SHARED_LIBRARY) 

Application.mk

 APP_STL := gnustl_shared 

编辑:我build立了我的项目基于:

http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-development/

Solutions Collecting From Web of "Eclipse-CDT无法在NDK项目中findstdlib符号"

阅读这个,它有解决scheme:

http://comments.gmane.org/gmane.comp.handhelds.android.ndk/14371

总结,如果链接有一天死了是这样的:

这是gnustl_shared模块声明中的一个错误。 对不起,这将在下一个版本中解决。 同时,您可以手动更改$NDK/sources/cxx-stl/gnu-libstdc++/Android.mk并replace以下行:

 LOCAL_EXPORT_LDLIBS := $(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libsupc++.a 

有:

 LOCAL_EXPORT_LDLIBS := $(call host-path,$(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libsupc++.a) 

我知道这不是一个完美的解决scheme,但至less它会让你点击“运行”或“debugging”通过Eclipse:

  • 右键单击您的Android C ++项目,然后select属性。
  • 在C / C ++常规下,单击“代码分析”
  • 切换到“使用项目设置”
  • 将由于使用vector类而收到的任何错误切换为“警告”。

对我而言,我需要切换的错误是:

  • “符号没有解决”
  • “未find会员声明”
  • “无效的模板参数”
  • “无效的参数”
  • “方法不能解决”

就像我说的那样,这不是完美的,你可能会错过这个实际的错误,但你仍然可以select“去声明”和一些语法检查能力,以及启动你的程序的能力。 ndk构build步骤将捕捉任何真正的错误,所以它不是一个巨大的损失。 老实说,我不确定这个问题的根源。 这可能是一个Eclipse错误。

closures主题,但相关的:你也可以通过eclipse使用ndk-gdb。 该教程在链接到OP的博客上,但是这里有一个直接的链接 。

祝你好运!


编辑(后续):

自那时起,我就想出了一个解决这个问题的方法,至less在我的盒子里。 OP说,包括STLPORT头文件为他工作。 起初,它并不适合我。 我不得不摧毁我的Eclipse项目,并开始新鲜(出于某种原因,它不会让我删除一些包括定义)。 添加STLPORT修复了一些问题,但在ndk r7b中,我仍然收到奇怪的错误(例如,即使在包含stddef后也未定义NULL)。 我最终也不得不包含x86头文件。 这些应该在很大程度上与arm重叠,然而,在包括顺序中把arm放在最上面是很有用的。

所以,如果你遇到了和我一样的问题,请添加


$ NDK_DIR / platforms / android-14 / arch-x86 / usr / include


到你的日食列表也包括在内。

我有这个问题出现在Windows上,由于在cygwin,我首选的Windowsshell不同的path格式,并使用伪unix风格的path,而不是窗口。 如果你有这个问题,并且你的cygwin在你的path中浮动,eclipse可以使用它。 更改属性> C常规>path和符号中的path为cygwin风格,而不是Windows风格(/ cygwin / c / Android ….而不是C:\ Android …)…无论如何,这对我工作。