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