LINUX.ORG.RU

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


0

0

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

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

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

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

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

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