加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

在linux上使用`libc`编译时未定义引用`__cxa_thread_atexit @@ C

发布时间:2020-12-14 01:07:02 所属栏目:Linux 来源:网络整理
导读:我正在尝试使用libc,libc abi和clang 3.6.0在Arch Linux x64上编译我的项目. 项目编译正确,但无法链接以下错误: error: CMakeFiles/main.cpp.o: undefined reference to symbol ‘__cxa_thread_atexit@@CXXABI_1.3.7’ /usr/lib/libstdc++.so.6:-1: error:
我正在尝试使用libc,libc abi和clang 3.6.0在Arch Linux x64上编译我的项目.

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

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标志进行编译和链接.

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

解决方法

与-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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读