在Linux上使用`libc ++`进行编译时,对__cxa_thread_atexit @@ CXXABI`的未定义引用

时间:2015-03-28 21:10:18

标签: c++ linux linker clang libc++

我正在尝试使用 libc ++ libc ++ abi clang ++ 3.6在 Arch Linux x64 上编译我的项目。 0

项目编译正确,但无法链接以下错误:

  

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

     

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

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

我应该链接哪些额外的库?我错过了一面旗帜吗?

1 个答案:

答案 0 :(得分:7)

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