Основная Программа и Общая Библиотека инициализируют ту же статическую переменную в __ static_initialization_and_destruction_0

Делает любой знает, почему библиотека инициализировала в dlopen (), инициализирует статическую переменную, принадлежавшую основной программе. Оба основная программа и совместно использованная библиотека имеют копию статической переменной, но по некоторым причинам общая библиотека повторно инициализирует копию основной программы статической переменной и разрушает ее, вызывая segfault, когда основная программа пытается разрушить ее.

Действительно ли это - случай искажения дурной славы в таблице символов?

8
задан Paul 13 April 2010 в 17:57
поделиться

1 ответ

Это случай, когда компоновщик во время выполнения хочет иметь только одну активную копию символа в процессе. Если и разделяемый объект, и исполняемый файл имеют копию символа, компоновщик будет разрешать все ссылки на один из них.

Для решения этой проблемы можно использовать сокращение символов с помощью команды version редактора связей при создании разделяемого объекта. Убедитесь, что символ для статической переменной не является глобальным, и вы получите желаемое поведение.

7
ответ дан 5 December 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: