Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Undefined reference to `__cxa_thread_atexit@@CXXABI` when compiling with `libc++` on linux

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?

like image 481
Vittorio Romeo Avatar asked Mar 28 '15 21:03

Vittorio Romeo


1 Answers

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.

like image 80
Thomas Avatar answered Oct 23 '22 20:10

Thomas