Делает любой знает, почему библиотека инициализировала в dlopen (), инициализирует статическую переменную, принадлежавшую основной программе. Оба основная программа и совместно использованная библиотека имеют копию статической переменной, но по некоторым причинам общая библиотека повторно инициализирует копию основной программы статической переменной и разрушает ее, вызывая segfault, когда основная программа пытается разрушить ее.
Действительно ли это - случай искажения дурной славы в таблице символов?
Это случай, когда компоновщик во время выполнения хочет иметь только одну активную копию символа в процессе. Если и разделяемый объект, и исполняемый файл имеют копию символа, компоновщик будет разрешать все ссылки на один из них.
Для решения этой проблемы можно использовать сокращение символов с помощью команды version редактора связей при создании разделяемого объекта. Убедитесь, что символ для статической переменной не является глобальным, и вы получите желаемое поведение.