LINUX.ORG.RU

Глобальные переменные и shared library


0

1

Если в библиотеке объявлена глобальная переменная - это плохо? А то у меня какая-то чертовщина творится. Глобальная переменная - указатель. Там, где помять выделяется - адрес один, а в другом месте адрес уже другой и соответственно Segmentation fault


глобальная переменная - это плохо

если очень хочется то можно, но лучше не надо.

AF ★★★
()
Ответ на: комментарий от AF

Нашел проблему - этих глобальных переменных было две - одна в библиотеке и еще одна с таким же именем в программе, куда я эту библиотеку подключал. Это нормально, что линковщик ничего не сказал?

lrod
() автор топика

Если в библиотеке объявлена глобальная переменная - это плохо?

это нормально. Если есть необходимость в глоб. переменной - то хорошо, если нет, то плохо :)

а вообще, приведите-ка код..100% что seg.fault вызван не наличием глоб.переменной, скорее упаханной памятью/побитым стеком и так.далее,

MKuznetsov ★★★★★
()
Ответ на: комментарий от lrod

Это нормально, что линковщик ничего не сказал?

Обмануть линковщик дело не хитрое. Всего лишь надо в одной области видимости объявить переменную, как переменную, а в другой, как extern.

AF ★★★
()
Ответ на: комментарий от lrod

Это нормально, что линковщик ничего не сказал?

да, динамический линковщик тупо ищет первый попавшийся вариант.

mashina ★★★★★
()

Эта глобальная переменная обязательно должна снаружи быть видна? Если нет, объяви её как static, и она не будет мешаться если в программе к которой линкуется библиотека будет переменная с таким же именем.

slovazap ★★★★★
()
Ответ на: комментарий от MKuznetsov

уже нашел проблему - писал выше

lrod
() автор топика

Мне в свое время советовали цеплять сошки с флагом RTLD_GLOBAL что бы на все сошки в рамках одного процесса был один набор глобальных переменных (грузил несколько сошек в питон через свиг).

AIv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.