在linux上使用“libc++”进行编译时,未定义对“__cxa_wthread_atexit@@CXXABI”的引用

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

本文关键字:引用 未定义 cxa wthread atexit@@CXXABI 编译 linux libc++      更新时间:2023-10-16

我正试图使用libc++libc++abiclang++3.6.0Arch Linux x64上编译我的项目。

项目编译正确,但未能链接到以下错误:

错误:CMakeFiles/main.cpp.o:未定义对符号'__cxa_wthread_atexit@@CXXABI_1.3.7'的引用

/usr/lib/libstdc++.so.6:-1:错误:添加符号时出错:命令行中缺少DSO

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

有没有其他我应该链接的库?我是不是错过了一面旗帜?

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