我有一个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
上不起作用。