У меня есть исполняемый файл, связанный с библиотекой stati c (скажем, liba), которая поддерживает dlopen
некоторые другие библиотеки (скажем, libb) при запуске.
Проблема возникает, когда libb использует некоторые tls символы, определенные в liba (определенные __thread xxx
):
- программа аварийно завершает работу из-за nullptr (некоторые переменные tls), если я связываю libb с liba
- программа завершается аварийно из-за неопределенные символы, если я не связываю libb с liba
Для случая 1, кажется, что у каждой библиотеки есть свой собственный раздел .tbss
, который определяет глобальные переменные tls. Я понятия не имею, чтобы обойти это. (за исключением передачи каждой переменной tls вручную)
Для случая 2 я попытался скомпилировать исполняемый файл с -rdynamic
и -ftls-model=global-dynamic
, но ни один из них не работает.
Итак, мой вопрос как это решить? Есть ли стандартный способ сделать?