最近要用NDK R5编译C++程序,NDK R4是不支持stl的,但用R5的时候编译以下程序出错,有哪位大侠帮忙看一下。
#include "com_Android_oray_First_FirstAndroid.h"
#include <list>
#include <vector>
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL Java_com_Android_oray_First_FirstAndroid_testJni(JNIEnv *, jobject)
{
std::vector<int> vecTest;
vecTest.push_back(1);
}
#ifdef __cplusplus
}
#endif
错误如下:
D:/bwy/workspace/FirstAndroid/obj/local/armeabi/objs/first_jni/com_Android_oray_
First_FirstAndroid.o: In function `std::__node_alloc::allocate(unsigned int&)':
E:/Software/android.setup/android-ndk-r5-windows/android-ndk-r5/sources/cxx-stl/
stlport/stlport/stl/_alloc.h:158: undefined reference to `std::__node_alloc::_M_
allocate(unsigned int&)'
D:/bwy/workspace/FirstAndroid/obj/local/armeabi/objs/first_jni/com_Android_oray_
First_FirstAndroid.o: In function `std::__node_alloc::deallocate(void*, unsigned
int)':
E:/Software/android.setup/android-ndk-r5-windows/android-ndk-r5/sources/cxx-stl/
stlport/stlport/stl/_alloc.h:161: undefined reference to `std::__node_alloc::_M_
deallocate(void*, unsigned int)'
E:/Software/android.setup/android-ndk-r5-windows/android-ndk-r5/sources/cxx-stl/
stlport/stlport/stl/_alloc.h:161: undefined reference to `std::__node_alloc::_M_
deallocate(void*, unsigned int)'
E:/Software/android.setup/android-ndk-r5-windows/android-ndk-r5/sources/cxx-stl/
stlport/stlport/stl/_alloc.h:161: undefined reference to `std::__node_alloc::_M_
deallocate(void*, unsigned int)'
collect2: ld returned 1 exit status
make: *** [/bwy/workspace/FirstAndroid/obj/local/armeabi/libfirst_jni.so] Error
1
后来搜了一下,有个老外说要在.mk文件中加一些选项
我照加了还是不行
.mk文件如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := first_jni
LOCAL_SRC_FILES := com_Android_oray_First_FirstAndroid.cpp
LOCAL_LDLIBS := \
-lm -llog \
-L /cygdrive/e/Software/android.setup/android-ndk-r5-windows/android-ndk-r5/sources/cxx-stl/stlport/libs/armeabi/libstlport_shared.so #这个是stlport里的动态lib
LOCAL_CPPFLAGS := -D_STLP_USE_SIMPLE_NODE_ALLOC #这个是老外说要加的,防止出我上面说的错误,我加了无果
APP_CPPFLAGS += -fexceptions
APP_STL := stlport_shared
APP_CPPFLAGS += -frtti
LOCAL_C_INCLUDES += \
/cygdrive/e/Software/android.setup/android-ndk-r5-windows/android-ndk-r5/sources/cxx-stl/stlport/stlport \#这个是stlport里的头文件
$(JNI_H_INCLUDE)
include $(BUILD_SHARED_LIBRARY)
跪求答案啊。。。