Undefined reference to `__cxa_thread_atexit@@CXXAB

2020-07-11 06:12发布

问题:

I'm trying to compile my projects on Arch Linux x64 using libc++, libc++abi and clang++ 3.6.0.

The projects compile properly, but fail to link with the following error:

error: CMakeFiles/main.cpp.o: undefined reference to symbol '__cxa_thread_atexit@@CXXABI_1.3.7'

/usr/lib/libstdc++.so.6:-1: error: error adding symbols: DSO missing from command line

I'm compiling and linking using the -stdlib=libc++ -lc++abi flags.

Is there any additional library I should link? Am I missing a flag?

回答1:

Either link with -lsupc++ or provide a small wrapper function (probably the better way for libc++) for the glibc implementation:

extern "C" int __cxa_thread_atexit(void (*func)(), void *obj,
                                   void *dso_symbol) {
  int __cxa_thread_atexit_impl(void (*)(), void *, void *);
  return __cxa_thread_atexit_impl(func, obj, dso_symbol);
}

It may be worth to mention that this only works with glibc >= 2.18.