Linker errors in Android NDK (undefined reference to `__cxa_end_cleanup')

前端 未结 5 2230
灰色年华
灰色年华 2021-02-07 03:43

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         


        
相关标签:
5条回答
  • 2021-02-07 03:52

    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.

    0 讨论(0)
  • 2021-02-07 03:57

    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++

    0 讨论(0)
  • 2021-02-07 03:58

    Take a look here: Linux C++: Linker is outputting strange errors.

    In Android's Application.mk this would be:

    APP_CPPFLAGS := -frtti
    
    0 讨论(0)
  • 2021-02-07 04:01

    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
    
    0 讨论(0)
  • 2021-02-07 04:12

    for me that meant adding -fno-rrti and -fno-exceptions then getting rid of "throw char*" in the code which took care of both.

    0 讨论(0)
提交回复
热议问题