我正在尝试使用 NDK 和 C++ 编写一个简单的 Android 应用程序。具体来说,我想使用最新版本的 NDK (r7) 中包含的 gnustdc++。 JNI 库已经像 C 一样编译和工作得很好,但现在我正在尝试引入 C++,我遇到了一些问题。
我已经添加了 ${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/include/
我项目的包含路径,以及 #includes
内联得到解决。但是,尝试实际使用任何 STL 类(例如 vector
)会导致 Symbol 'vector' could not be resolved
。 .
从 <stdlib.h>
导入的所有标准 C 符号这样的工作也是如此,直到我尝试替换 #include
与 <cstdlib>
.然后失败并显示 Function 'malloc' could not be resolved
等等。
奇怪的是,添加 STLport header (在 ${NDK_ROOT}/sources/cxx-stl/stlport/stlport
中)解决了我所有的问题。但是我在 GNU C++ 中链接,而不是在 STLPort 中链接,所以这充其量是一个不方便且不正确的“解决方案”。这些 header 可以工作但其他 header 不起作用似乎很奇怪。 Eclipse 是否无法索引或解析 GNU C++ header ?
安卓.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)
应用程序.mk
APP_STL := gnustl_shared
编辑:我根据以下内容设置我的项目:
http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-development/
最佳答案
阅读这个,它有解决方案:
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)
关于android - Eclipse-CDT 无法在 NDK 项目中找到 stdlib 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8686931/