【问题标题】:Undefined reference to `__cxa_thread_atexit@@CXXABI` when compiling with `libc++` on linux在 Linux 上使用 `libc++` 编译时对 `__cxa_thread_atexit@@CXXABI` 的未定义引用
【发布时间】:2015-06-02 01:53:24
【问题描述】:

我正在尝试使用 libc++libc++abiclang++ 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 标志进行编译和链接。

我应该链接任何其他库吗?我是不是少了一面旗帜?

【问题讨论】:

  • 快速谷歌搜索表明这在 C++ ABI 中没有实现。

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


【解决方案1】:

要么链接-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。

【讨论】:

    猜你喜欢
    • 2012-08-30
    • 2011-10-24
    • 2013-04-22
    • 1970-01-01
    • 2012-08-16
    • 2023-03-10
    • 2017-02-14
    • 2014-04-27
    • 2021-12-26
    相关资源
    最近更新 更多