2016-12-05 1 views
0

Я не уверен, что полная реализация в файле заголовка struct будет иметь какое-то значение для его потребности в «_attribute __ ((видимость (« по умолчанию »)))» при использовании как часть общей библиотеки.Is __attribute __ ((видимость («по умолчанию»))), необходимая для структур, реализация которых выполняется в файле заголовка? (C++)

ответ

0

Если вы собираете с

-fvisibility=hidden 

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

nm -C -D <library>.so 

Тогда вы можете видеть различия, когда вы устанавливаете его по умолчанию, а когда нет.

+0

Это не совсем ответит на вопрос. Вопрос заключается в том, делает ли он какие-либо различия для структур со всей его реализацией, сделанной в файле заголовка. Аргумент, который мне дал, заключается в том, что «файл заголовка отправлен в любом случае вместе с библиотекой, поэтому нет необходимости использовать видимость по умолчанию для этих структур» ... – FCR

+0

Видимость - это просто установить или не обозначить символ в общей библиотеке, чтобы он можно использовать после, если нет необходимости устанавливать его по умолчанию, то нет никаких изменений, чтобы установить его или нет – Glick

1

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

Смежные вопросы