У меня есть приложение, которое использует dlopen()
для загрузки дополнительных модулей. Приложение и модули построены на Ubuntu 12.04 x86_64 с использованием gcc 4.6, но для i386 arch. Затем двоичные файлы копируются на другую машину с точно такой же ОС и работают нормально.
Однако, если они скопированы в Ubuntu 12.04 i386, то некоторые (но не все) модули не загружаются со следующим сообщением:
dlopen: cannot load any more object with static TLS
Я подозреваю, что это вызвано использованием переменных __thread
. Однако такие переменные не используются в загруженных модулях - только в самом модуле загрузчика.
Может ли кто-нибудь предоставить дополнительную информацию, какова может быть причина?
Я сокращаю число переменных __thread
и оптимизирую их (с помощью -ftls-model
и т.д.), мне просто интересно, почему он не работает почти в той же системе.