Вредит ли gcc "-fvisibility = hidden" при применении к стандартным скомпилированным исполняемым файлам c - PullRequest
0 голосов
/ 21 октября 2018

Я компилирую ngspice.Его configure.ac добавляет -fvisibility = hidden ко всем шагам компиляции, не только во время генерации «моделей кода», которые являются общими библиотеками.

Есть ли риск, если во время компиляции стандарта будет добавлен -fvisibility = hiddenисполняемый файл?

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Нет.Он просто добавит атрибут к внешним символам, и этот атрибут будет проигнорирован компоновщиком, когда он увидит, что делает исполняемый файл (если вы не используете -rdynamic / -Wl,--export-dynamic).С другой стороны, то, что может ухудшить производительность, это компиляция с -fpic/-fPIC, поскольку это немного замедлит ваш код.-fpic/-fPIC не требуется для исполняемых файлов, если только они не зависят от позиции (PIE).

0 голосов
/ 21 октября 2018

Для стандартных исполняемых файлов обычно нет необходимости иметь какие-либо видимые символы, кроме main.Тем не менее, кажется, что компиляторы достаточно умны, чтобы сохранять main видимым, если вы компилируете с -fvisibility=hidden.

Исключением является ситуация, когда ваша программа загружает библиотеки плагинов во время выполнения с использованием dlopen(), и эти плагиныожидать, чтобы иметь возможность вызывать функции в основной программе.Ваши плагины не смогут найти необходимые символы.

...