NDK之所以无法解析<iostream>是因为ndk使用的c++库是bionic。这个库几乎包含了所有c标准库,但是只包含了一个c++的轻量库,这里面没有<iostream>。要想加载<iostream>就必须加载c++标准库,我们分3个步骤完成:
1.新建Appcation.mk文件(这是一个关于你所需要的动态库或静态库的makefile文件),然后在写一句话:
APP_STL := stlport_static
这句话表示加上STLport这种类型的库,这里面包括了c++标准库。
2.在Android.mk文件里加两句(加粗的两句):
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
LOCAL_C_INCLUDES := $(NDK_ROOT)/sources/cxx-stl/stlport/stlport
LOCAL_LDLIBS := $(NDK_ROOT)/sources/cxx-stl/stlport/libs/armeabi/libstlport_static.a
include $(BUILD_SHARED_LIBRARY)
加粗的第一句表示包含STLport库的头文件,第二句表示链接到STLport的lib库上面。
3.完成以上两步,你还是无法解析<iostream>,你可以试试再完成第三步:
在项目资源管理界面下,找到你的项目,右击它,然后点击属性。在C++常规->路径和符号中,我们选择添加NDK目录下面的sources\cxx-stl\stlport\stlport文件。就像图片上面的圈红的那个文件。这样eclipse就认识<iostream>以及它的symbol了。
什么,完成以上3步,你的eclipse还是无法解析<iostream>?那么恭喜你,你还要折腾好一阵了。也许你可以试试crystax的第三方NDK-----android-ndk-r8-crystax,这是一个包含了C++标准库的非官方NDK。我是试过android-ndk-r8-crystax的,感觉加载起来太慢了,所以就放弃了。