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

StackOverflow https://stackoverflow.com/questions/2631918

Вопрос

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

Это случай плохого имени, покинувшись в таблице символов?

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top