Он «защищен» просто потому, что его символ / местоположение не стало известным компоновщику.Таким образом, вы не можете написать код в другом модуле, который явно ссылается на статический объект по имени символа, потому что компоновщик не имеет такого символа.Защита во время выполнения отсутствует.
Если вы передадите адрес статическому объекту другому модулю во время выполнения, вы сможете получить к нему доступ через такой указатель.Это не «дурак компилятора» (или компоновщик на самом деле), такие действия могут быть полностью законными.
Тот факт, что вы получили ошибку сегмента, возможно, по совершенно другой причине (например, неверный указатель).Компилятор может выбрать встроенный код, и в этом случае указатель на него будет невозможен, но если вы явно берете адрес объекта, компилятор должен его создать, поэтому это маловероятно.