最近,转到 android 平台进行开发。 做了一个native service, 编译的时候,发现不能正常使用STL, 经过一番折腾,总算是搞掂了。我使用的是android 4。
error
: STL 头文件找不到 ?
在Android.mk 增加 LOCAL_C_INCLUDES := ndk/sources/cxx-stl/stlport/stlport
主要是指定 STL 头文件的位置。
error:
stlport/stlport/stl/_alloc.h: error: undefined reference to 'std::__node_alloc::_M_allocate(unsigned int&)
在Android.mk 增加 LOCAL_CFLAGS := -D_STLP_USE_NO_IOSTREAMS -D_STLP_USE_MALLOC
这个解决办法并不完美,应该不能使用 STL的IOSTREAM。 有可能还会有其它的什么问题,需要多做测试。
我是这样解决的: 当时查了一些资料没有头绪,后来受到一篇文章的影响,说是需要定义一个 -D_STLP_USE_SIMPLE_NODE_ALLOC,当然了,这个宏定义并没有解决我的问题。
我看了一下 _alloc.h 出错的地方
#if !defined (_STLP_USE_NO_IOSTREAMS)
xxx 出错的地方。
#endif
于是我就 定义了 _STLP_USE_NO_IOSTREAMS,我并不需要使用 IOSTREAMS。 后来又报错了另一个地方:
typedef __pthread_alloc __alloc_type;
#elif defined (_STLP_USE_NEWALLOC)
typedef __new_alloc __alloc_type;
#elif defined (_STLP_USE_MALLOC)
typedef __malloc_alloc __alloc_type;
#else
typedef __node_alloc __alloc_type; ----- 出错。
#endif
于是,定义了 _STLP_USE_MALLOC 。 问题就解决了。