TLS хранилище: как разделить глобальное хранилище tls между исполняемым файлом и другими библиотеками - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть исполняемый файл, связанный с библиотекой stati c (скажем, liba), которая поддерживает dlopen некоторые другие библиотеки (скажем, libb) при запуске.

Проблема возникает, когда libb использует некоторые tls символы, определенные в liba (определенные __thread xxx):

  1. программа аварийно завершает работу из-за nullptr (некоторые переменные tls), если я связываю libb с liba
  2. программа завершается аварийно из-за неопределенные символы, если я не связываю libb с liba

Для случая 1, кажется, что у каждой библиотеки есть свой собственный раздел .tbss, который определяет глобальные переменные tls. Я понятия не имею, чтобы обойти это. (за исключением передачи каждой переменной tls вручную)

Для случая 2 я попытался скомпилировать исполняемый файл с -rdynamic и -ftls-model=global-dynamic, но ни один из них не работает.

Итак, мой вопрос как это решить? Есть ли стандартный способ сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...