【发布时间】:2013-01-31 06:35:23
【问题描述】:
我有一个使用dlopen() 加载附加模块的应用程序。应用程序和模块使用 gcc 4.6 构建在 Ubuntu 12.04 x86_64 上,但用于 i386 架构。然后将二进制文件复制到另一台具有完全相同操作系统的机器上并正常工作。
但是,如果将它们复制到 Ubuntu 12.04 i386,则某些(但不是全部)模块将无法加载并显示以下消息:
dlopen: cannot load any more object with static TLS
我怀疑这是由__thread 变量的使用引起的。但是,这些变量不会在加载的模块中使用 - 仅在加载模块本身中使用。
有人可以提供任何其他信息吗,可能是什么原因?
我正在减少 __thread 变量的数量并优化它们(使用 -ftls-model 等),我只是好奇为什么它在几乎相同的系统上不起作用。
【问题讨论】:
标签: c++ linux gcc ubuntu dlopen