首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Eclipse-CDT在NDK项目中找不到stdlib符号

Eclipse-CDT在NDK项目中找不到stdlib符号
EN

Stack Overflow用户
提问于 2011-12-31 15:21:47
回答 3查看 9.1K关注 0票数 8

我正在尝试使用NDK和C++编写一个简单的安卓应用程序。具体地说,我想使用NDK的最新版本(r7)中包含的gnustdc++。JNI库已经像C一样编译和工作得很好,但是现在我正在尝试引入C++,我遇到了一些问题。

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

在我尝试用<cstdlib>替换#include之前,从<stdlib.h>导入的所有标准C符号以及类似的符号都可以正常工作。然后使用Function 'malloc' could not be resolved失败,以此类推。

奇怪的是,添加stlport头文件(在${NDK_ROOT}/sources/cxx-stl/stlport/stlport中)可以解决我的所有问题。然而,我使用的是GNU C++,而不是STLPort,所以这充其量是一个不方便和不恰当的“解决方案”。奇怪的是,这些头文件可以工作,而其他头文件却不行。Eclipse是否无法索引或解析GNU C++头文件?

Android.mk

代码语言:javascript
复制
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

代码语言:javascript
复制
APP_STL := gnustl_shared

编辑:我的项目建立在以下基础上:

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-06 04:51:27

读一读这篇文章,它有一个解决方案:

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

如果有一天链接死了,总结如下:

这是gnustl_shared模块声明中的一个错误。很抱歉,它将在下一个版本中修复。同时,您可以手动更改$NDK/sources/cxx-stl/gnu-libstdc++/Android.mk,并替换显示以下内容的行:

代码语言:javascript
复制
LOCAL_EXPORT_LDLIBS := $(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libsupc++.a

通过以下方式:

代码语言:javascript
复制
LOCAL_EXPORT_LDLIBS := $(call host-path,$(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libsupc++.a)
票数 3
EN

Stack Overflow用户

发布于 2012-03-23 10:19:18

我知道这不是一个完美的解决方案,但至少它会让你通过Eclipse点击“运行”或“调试”:

  • 右键单击你的Android C++项目并选择Properties.
  • Under C/C++ General,单击"Code Analysis"
  • Switch to“使用项目中由于使用向量类而收到的任何错误。

对我来说,到目前为止我需要切换的错误是:

Symbol is not resolved"

  • "Member

  • not found"

  • "Invalid template argument"

  • "Invalid arguments"

  • "Method cannot be resolved"

就像我说的,它并不完美,你可能会因此而错过真正的错误,但你仍然可以选择“转到声明”和一些语法检查功能,以及启动你的程序的能力。ndk-build步骤无论如何都会捕捉到任何真正的错误,所以这真的不是一个巨大的损失。老实说,我不确定这个问题的来源。这很可能是Eclipse的一个bug。

离题但相关:您也可以通过eclipse使用ndk-gdb。教程在博客上链接到OP,但here's a direct link anyway

祝你好运!

编辑(后续):

从那以后,我想出了一种方法来解决这个问题,至少在我的机器上是这样。操作员说,包括STLPORT报头对他有效。一开始,对我来说不是这样的。我不得不销毁我的Eclipse项目并重新开始(由于某种原因,它不允许我删除一些include定义)。添加STLPORT修复了一些问题,但在ndk r7b中,我仍然收到奇怪的错误(例如,即使在包含stddef之后也没有定义NULL )。我最终不得不把x86头也包括进来。这些应该在很大程度上与arm重叠,然而,在包含顺序中将arm放在“最上面”是很有用的。

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

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

也包括在你的eclipse列表中。

票数 2
EN

Stack Overflow用户

发布于 2014-08-17 19:40:30

我在windows上遇到了这个问题,因为cygwin中的路径格式不同,我喜欢的windows shell使用的是伪unix样式的路径,而不是windows。如果你有这个问题,并且在你的路径上有cygwin漂浮,eclipse可以使用它。将Properties>C General>Paths和符号中的路径更改为cygwin样式,而不是windows样式(/cygwin/c/Android...而不是C:\Android ... ) ...不管怎么说,这对我很有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8686931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档