我自己遇到了这个错误,在调查时,我来了一个

mailing list post with this info:

If you link a shared object containing IE-model access relocs,the object

will have the DF_STATIC_TLS flag set. By the spec,this means that dlopen

might refuse to load it.

查看/usr/include/elf.h,我们有:

/* Values of `d_un.d_val' in the DT_FLAGS entry. */

...

#define DF_STATIC_TLS 0x00000010 /* Module uses the static TLS model */

因此,您需要测试是否在共享库的DT_FLAGS条目中设置了DF_STATIC_TLS.

为了测试,我使用线程本地存储创建了一段简单的代码:

static __thread int foo;

void set_foo(int new) {

foo = new;

}

然后我用两个不同的线程本地存储模型编译了两次:

gcc -ftls-model=initial-exec -fPIC -c tls.c -o tls-initial-exec.o

gcc -shared tls-initial-exec.o -o tls-initial-exec.so

gcc -ftls-model=global-dynamic -fPIC -c tls.c -o tls-global-dynamic.o

gcc -shared tls-global-dynamic.o -o tls-global-dynamic.so

当然,我可以看到使用readelf的两个库之间的区别:

$readelf --dynamic tls-initial-exec.so

Dynamic section at offset 0xe00 contains 25 entries:

Tag Type Name/Value

...

0x000000000000001e (FLAGS) STATIC_TLS

tls-global-dynamic.so版本没有DT_FLAGS条目,大概是因为它没有设置任何标志.因此,使用readelf和grep创建脚本以查找受影响的库应该相当容易.

linux 有线程本地存储 (tls)?,有没有办法确定Linux上的库使用的线程本地存储模型...相关推荐

  1. 关于Linux线程的线程栈以及TLS

    说明: a. 本文描述Linux NPTL的线程栈简要实现以及线程本地存储的原理,实验环境中Linux内核版本为2.6.32,glibc版本是2.12.1,Linux发行版为ubuntu,硬件平台为x ...

  2. linux mongo 服务器,如何用MongoDB在Linux服务器上创建大量连接和线程的记忆

    最近,我们想对MongoDB在大量连接中的行为进行基准测试.这使我不得不重新讨论该主题,并刷新关于如何在Linux服务器上创建大量连接和线程的记忆.在此过程中,我发现了一些没有使用过的新可调参数. M ...

  3. 本地套接字示例[来源:Advanced Linux Programming]

    本地套接字示例[来源:Advanced Linux Programming] 要通过套接字连接同一台主机上的进程,可以使用符号常量 PF_LOCAL 和 PF_UNIX所代表的本地命名空间.它们被称为 ...

  4. 本地Windows系统远程连接滴滴云Linux云服务器

    如何使用Windows系统远程连接滴滴云服务器是一些开发者比较关心的问题.本文为有这类需求的开发人员介绍一款简单易用.免费且开源的软件--PuTTY供参考. 一.Putty介绍 PuTTY是一个免费的 ...

  5. C++信号量实现线程间同步,windows使用SetEvent,linux使用sem_t,QT测试

    目录 windows使用CreateEvent.SetEvent.ResetEvent.WaitForSingleObject linux使用sem_init.sem_wait.sem_trywait ...

  6. linux 个人云存储_2020年搭建NAS,你应该这样选!联想个人云存储A1深度体验

    写这篇文章之前,我的某马NAS已经吃灰2年,这两年我都是用一个5盘位30TB移动硬盘柜作为日常PC文件的冷备份存储外设,用一个叫做FreeFileSync的软件做为一键同步的工具,详情大家可以查看我早 ...

  7. 如何高效放鸽子——线程的创建_莫韵乐的Linux王国

    如何高效放鸽子--线程的创建.等待和销毁 前文再续,书接上一回 今天我们将会采访一位放鸽子高手,探讨如何高效地放放鸽子 记者:您好,真是百闻不如一见,没想到传说中的鸽王相貌平平却有如此大的能耐 鸽王: ...

  8. 上传阿里云oss对象型存储 本地文件和上传流上传

    上传阿里云oss对象型存储 本地文件和上传流上传 import java.io.ByteArrayInputStream; import java.io.File; import java.io.Fi ...

  9. windows无法启动 bcd linux efi,bcdedit 无法打开启动配置数据存储的终极解决办法

    对于Windows NT6系列的用户来说,现在的系统引导趋势是采用UEFI+GPT模式,,那么在GPT分区下,windows系列引导故障处理程序有bcdedit,bcdboot等..正常情况下,执行b ...

最新文章

  1. 四种Sandcastle方法生成c#.net帮助类帮助文档
  2. jira图片_JIRA使用不求人-从菜鸟到高手
  3. 让 Windows 7 定时待机
  4. c++实现字符串类的封装
  5. python手把手教程_【Python 1-7】Python手把手教程之——详解列表List
  6. 针对视觉位姿估计特征点优化问题的详细研究
  7. python动力学建模与仿真_PyMC3中的简单动力学模型
  8. 神奇的机器人评课_《机器人》教学反思
  9. PyTorch学习—6.PyTorch数据读取机制Dataloader与Dataset
  10. Android SDK下载安装及配置教程
  11. java求职英文简历范本2篇_JAVA英文求职简历范文
  12. 怎么提高文公写作水平?公文写作礼仪类模板(1)
  13. 你理解的智能家居就是智能家居么?
  14. (附源码)计算机毕业设计SSM-志愿者管理系统
  15. 前端如何设置浏览器网页标签页前的小图标favicon.ico
  16. LambdaQueryWrapper和QueryWapper的区别
  17. 用单片机的RAM虚拟U盘(文件系统:Fat16)
  18. XLA编译器用于JIT加速
  19. 计算机专业13.3寸电脑,13.3寸笔记本有多大_13.3英寸笔记本有多大
  20. 一年过去了,Uber 的致命事故给我们上了哪些生动的警示课?...

热门文章

  1. visual studio 2015 2017 key vs2015 vs2017密钥
  2. 《Linux 性能及调优指南》1.4 硬盘I/O子系统
  3. java代码求IP和mac地址
  4. Python函数式编程,map/reduce,filter和sorted
  5. SpringBoot与JdbcTemplate的完美结合
  6. 如何给100亿个数字排序
  7. 数据在内存中的大小端模式存储
  8. 进阶!基于CentOS7系统使用cobbler实现单台服务器批量自动化安装不同版本系统(week3_day5_part2)-技术流ken...
  9. [20190226]测试使用bbed恢复索引.txt
  10. 一道考查request导致的安全性问题的ctf题