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

让人想犯罪 __ 提交于 2019-12-03 04:54:50

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
NuSkooler

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

In Android's Application.mk this would be:

APP_CPPFLAGS := -frtti

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

user2054803

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.

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!