我正在尝试使用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
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编辑:我的项目建立在以下基础上:
http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-development/
发布于 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,并替换显示以下内容的行:
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)发布于 2012-03-23 10:19:18
我知道这不是一个完美的解决方案,但至少它会让你通过Eclipse点击“运行”或“调试”:
对我来说,到目前为止我需要切换的错误是:
Symbol is not 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列表中。
发布于 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 ... ) ...不管怎么说,这对我很有效。
https://stackoverflow.com/questions/8686931
复制相似问题