专栏首页owentAndroid NDK undefined reference to ___tls_get_addr 错误

Android NDK undefined reference to ___tls_get_addr 错误

本来看到Android的ndk都开始用gcc4.8和gcc4.9了,而且gcc4.8.1开始支持全部的c++11的特性,我就很happy地用上了。结果出现这么个错误。

网上查到说是Android的run time竟然不支持 thread local storage(TLS),更准确地说,是它没实现。

而我这里需要用TLS来做内存通道无锁队列的数据统计(还好去掉以后只是统计不准)

再查文档下来,原来是android的run time没有用gnu的glibc,而是用得Google自己实现的Bionic,这货很多功能没有实现,留了空接口。

根据维基百科上的说法,Boinic没实现的还不止这个。比glibc而言还不支持的功能还有:

  • 不支持异常处理
  • 无标准模板(这个可以用gnustl或者stlport代替)
  • 不支持宽字符(貌似用处不大,现在主流UTF-8了)
  • 据说它比glibc速度快(也不知道快多少) 真是留下了茫茫多坑呐,而且还不知道是不是有其他什么不支持的功能。

目前的解决方案比较暴力不完美,就是在TLS的地方排除Android平台

#if defined(__ANDROID__)
// android 不支持tls
#define THREAD_TLS
#elif defined(__clang__)
#define THREAD_TLS __thread
#elif defined(__cplusplus) && __cplusplus >= 201103L
#define THREAD_TLS thread_local
// VC 2003
#elif defined(_MSC_VER) && (_MSC_VER >= 1300)
#define THREAD_TLS __declspec( thread )
#else
#define THREAD_TLS __thread
#endif

具体见: https://github.com/owent-utils/c-cpp/blob/master/include/std/thread.h

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ARM 交叉编译环境搭建

    最近研究了一下ARM的交叉编译环境搭建,太麻烦了必须作一下记录啊。 前两个方法比较简单一点,关键是淫家Google帮你弄好了大部分功能

    owent
  • 可执行文件压缩

    最近看Rust相关东西的时候看到一篇关于压缩可执行文件的文章。压缩可执行文件对嵌入式开发特别有用,但是延伸一下用来减少我们游戏行业里预编译的工具二进制包大小和A...

    owent
  • C++ 新特性学习(四) — Bind和Function

    木有错,这是C++,并且很方便地实现了委托 这就是传说中的绑定库和增强型的函数对象 接下来一个一个来

    owent
  • 商汤自曝近况:明年或IPO、无人车大单、不寻常的美研、C轮将完

    夏乙 李根 发自 凹非寺 量子位 报道 | 公众号 QbitAI ? 商汤创始人汤晓鸥跟香港记者透露了一大堆新消息。 例如,正在进行C轮融资的商汤科技,最快有...

    量子位
  • Condition Lock

    Well, conditional variables allow you to wait for certain condition to occur. In...

    lesM10
  • 正面刚谷歌苹果,diss了BAT及友商,商汤科技说自己是一只“黑羊”

    这家刚刚创下AI领域融资新纪录的公司,对这场活动有多重视?看看百度搜索广告和现场标语就知道了。

    量子位
  • 商汤获6亿美元C轮融资,与旷视的战争将如何继续?

    用户1737318
  • 资讯 | 商汤科技获赛领资本6000万美元投资,将加速商业化布局

    机器之心报道 信息来源:商汤科技 ? 据机器之心今日消息,人工智能公司商汤科技获得赛领资本 6000 万美元投资,赛领资本因此次投资成为商汤的重要战略股东。 ...

    机器之心
  • 商汤(现在)是一家怎样的公司?

    李根 发自 清华科技园 量子位 报道 | 公众号 QbitAI ? △ 刚完成B轮4.1亿美元融资的商汤科技 刚宣布4.1亿美元B轮融资的商汤科技,是一家令人熟...

    量子位
  • 【首发】商汤科技获赛领资本6000万美元投资,4000万自建深度学习超算中心

    【新智元导读】人工智能领军企业商汤科技今日宣布获得赛领资本6000万美元投资,赛领资本因此次投资成为商汤的重要战略股东。商汤将用4000万人民币自建深度学习超算...

    新智元

扫码关注云+社区

领取腾讯云代金券