NDK下STL编译不成功,怎么办?
代码如下
#include <string.h>#include <jni.h>#include <iostream>#include <vector>using namespace std;#ifndef _Included_com_example_hellojni_HelloJni#define _Included_com_example_hellojni_HelloJni#ifdef __cplusplusextern "C" {#endifjstringJava_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz ){ vector<int> vec; //只写这一行,还可以编译成功 vec.push_back(1);//一写这行,马上出下面一大堆错误 return env->NewStringUTF("Hello from JNI !");}#ifdef __cplusplus}#endif#endif
D:/android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/lib\libsupc++.a(eh_exception.o): In function `std::exception::what() const':
/tmp/ndk-digit/src/build/../gcc/gcc-4.4.3/libstdc++-v3/libsupc++/eh_exception.cc:46: multiple definition of `std::exception::what() const'
D:/android-ndk-r6/samples/hello-jni/obj/local/armeabi/libstlport_static.a(dll_main.o):D:/android-ndk-r6/sources/cxx-stl/stlport/src/dll_main.cpp:68: first defined here
D:/android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/lib\libsupc++.a(eh_exception.o): In function `std::bad_exception::what() const':
/tmp/ndk-digit/src/build/../gcc/gcc-4.4.3/libstdc++-v3/libsupc++/eh_exception.cc:52: multiple definition of `std::bad_exception::what() const'
D:/android-ndk-r6/samples/hello-jni/obj/local/armeabi/libstlport_static.a(dll_main.o):D:/android-ndk-r6/sources/cxx-stl/stlport/src/dll_main.cpp:69: first defined here
D:/android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/lib\libsupc++.a(eh_exception.o): In function `~exception':
/tmp/ndk-digit/src/build/../gcc/gcc-4.4.3/libstdc++-v3/libsupc++/eh_exception.cc:31: multiple definition of `std::exception::~exception()'
D:/android-ndk-r6/samples/hello-jni/obj/local/armeabi/libstlport_static.a(dll_main.o):D:/android-ndk-r6/sources/cxx-stl/stlport/src/dll_main.cpp:65: first defined here
D:/android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/lib\libsupc++.a(eh_exception.o): In function `~bad_exception':
/tmp/ndk-digit/src/build/../gcc/gcc-4.4.3/libstdc++-v3/libsupc++/eh_exception.cc:33: multiple definition of `std::bad_exception::~bad_exception()'
D:/android-ndk-r6/samples/hello-jni/obj/local/armeabi/libstlport_static.a(dll_main.o):D:/android-ndk-r6/sources/cxx-stl/stlport/src/dll_main.cpp:67: first defined here
D:/android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/lib\libsupc++.a(eh_exception.o):(.data.rel.ro._ZTVSt9exception+0x0): multiple definition of `vtable for std::exception'
D:/android-ndk-r6/samples/hello-jni/obj/local/armeabi/libstlport_static.a(dll_main.o):(.data.rel.ro+0x108): first defined here
collect2: ld returned 1 exit status
make: *** [/cygdrive/d/android-ndk-r6/samples/hello-jni/obj/local/armeabi/libhello-jni.so] 错误 1
[解决办法]
貌似就是不能使用 STL 的;
如果是移植,自己实现相关的类吧;
NDK 中的异常也是不支持的,但是可以使用 C 的错误处理机制
[解决办法]
android.mk
你配置是否正确呢
库或头文件有包含正常吗
[解决办法]
你vector的头文件有米有包含?