简体   繁体   中英

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?

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM