LINUX.ORG.RU

Вопрос по gcc: опция -fvisibility=hidden и двойник статической переменной


0

0

Начну, собственно, с вопроса: имеет ли смысл указывать опцию -fvisibility=hidden для обычной программы на c++ (не библиотеки)?

Предыстория вопроса такая. Недавно провел два дня в поисках страшного глюка в моей программе, оказалось виной всему опция -fvisibility=hidden, которая затесалась в список флагов gcc (добавляют ее скрипты kde4 для cmake).

Суть проблемы в следующем. Я пишу библиотеку и программу, ее использующую, и то и другое на c++. Библиотека компилируется без опции -fvisibility, то есть по умолчанию подразумевается -fvisibility=default. Программа компилировалась с -fvisibility=hidden. В результате произошло следующее: одна статическая переменная из библиотеки (объявлена в шаблонном классе) при старте программы инициализируется *дважды* (проверял отладочным выводом), то есть появляется два ее экземпляра, которые попеременно используются в программе! Вот так и начинаются бессонные ночи с отладчиком :-)

Когда я убрал эту опцию, все встало на свои места. В общем, хотелось бы услышать комментарии по этому вопросу: есть ли вообще смысл в указании этой опции для обычных программ и, если она указана, не является ли такой побочный эффект, скажем, багом gcc?

Re: Вопрос по gcc: опция -fvisibility=hidden и двойник статической переменной

Проще, наверное, привести часть исходного текста программы, где происходит проверка на существование переменной и выполняется выделение памяти под новую.

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