在 linux 上使用 `libc++` 编译时对 `__cxa_thread_atexit@@CXXABI` 的未定义引用

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

我正在尝试使用 libc++libc 在 Arch Linux x64 上编译我的项目++abiclang++ 3.6.0.

项目编译正确,但无法 link 并出现以下错误:

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

我正在使用 -stdlib=libc++ -lc++abi 标志进行编译和 linking。

我应该 link 有任何额外的库吗?我错过了一面旗帜吗?

link 与 -lsupc++ 或提供一个小包装函数 (对于 libc++ 可能是更好的方法)对于 glibc 实现:

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);
}

可能值得一提的是,这仅适用于 glibc >= 2.18。