Основная программа и общая библиотека инициализирует ту же статическую переменную в __static_initialization_and_destruction_0
-
26-09-2019 - |
Вопрос
Кто-нибудь знает, почему библиотека инициализируется в DLOPEN (), инициализирует статическую переменную, принадлежащую основной программе. Обе основные программы и общая библиотека имеют копию статической переменной, но по какой-то причине общая библиотека повторно инициализирует копию основной программы статической переменной и разрушает ее, вызывая его, вызывая, что основная программа пытается разрушить его.
Это случай плохого имени, покинувшись в таблице символов?
Решение
Это случай, когда линкер времени выполнения хочет только одну активную копию символа в процессе. Если оба общий объект и исполняемый файл имеют копию символа, линкер времени выполнения разрешит все ссылки на один из них.
Что вы можете сделать, чтобы решить эту проблему - использовать снижение символа с помощью Версия команда редактора ссылок при создании общего объекта. Убедитесь, что символ для статической переменной не глобальный, и вы получите поведение, которое вы ищете.