I\'m getting this output after adding in a set of code from a colleague:
./obj/local/armeabi/objs/jniWrapper/native.o: In function `_Vector_base\':
D:/opt/androi
In my case, the error undefined reference to __cxa_end_cleanup
shows up when I add -fexceptions
to the compiler options. When removing that option, the undefined ref goes away, but that means you have to clear your code from exception statements.
You can fix this problem by adding the compiler option -lsupc++
.
Edited: The reason: your code is using C++ exception mechanism which compiler automatically generate try/catch/finally block hidden code which in turn call __cxa_end_cleanup somewhere. lsupc++ means link to libsupc++.a
Another way to resolve this problem is add -fno-exceptions option to gcc which obviously means disable exception handler mechanism.
BTW, you should also add -fno-rtti to avoid other maybe-encountered compilation error, this is because all android's C++ class is compiled without dynamic type info in class memory layout.
In a word, you shoud use one of these option combos: 1. -fno-rtti -fno-exceptions 2. -fno-rtti -lsupc++
Take a look here: Linux C++: Linker is outputting strange errors.
In Android's Application.mk this would be:
APP_CPPFLAGS := -frtti
After reading android-ndk/docs/CPLUSPLUS-SUPPORT.html
I found that there a couple more libraries that I can link to:
C++ C++ Standard
Exceptions RTTI Library
system no no no
gabi++ no yes no
stlport no yes yes
gnustl yes yes yes
This stops my linker errors (and pushes the build onto a new set of errors :))
Application.mk
APP_STL := gnustl_static
for me that meant adding -fno-rrti and -fno-exceptions then getting rid of "throw char*" in the code which took care of both.