Подавить 'ld: warning: cannot export hidden symbol'
От: Went  
Дата: 14.10.22 12:46
Оценка:
Здравствуйте.
Есть проект, собирающийся в dylib на MacOS через Clang. Проект очень большой.
Экспорт-лист (-exported_symbols_list) представляет из себя что-то такое:

*namespace1*
*namespace2*
...
*namespaceN*

При линковке указывается опция, чтобы скрыть символы, которые не указаны явно как "линкуемые"

-fvisibility=hidden -fvisibility-inlines-hidden

В результате, линкер засыпает меня миллионами предупреждений вроде:

ld: warning: cannot export hidden symbol namespace1::ClassWithDefaultDestructor::~ClassWithDefaultDestructor() from somefile.o

Причина, мне кажется, очевидна: с одной стороны мы говорим "экспорти всё", с другой — "скрой то, что инлайновое или то неинлайновое, что, на наш взгляд, экспортить не нужно". Если не скрывать — ворнинги пропадают, но мы получаем +10% к размеру dylib, чего хотелось бы избежать. Писать экспорт-лист более конкретно, руками перечисляя всё что нужно — не вариант, проект слишком большой. Как правильно поступить? Можно просто "скрыть" этот ворнинг?
Re: Подавить 'ld: warning: cannot export hidden symbol'
От: Went  
Дата: 20.10.22 08:33
Оценка:
Здравствуйте.
Короче покопался я в исходниках линкера (ld64), и нашел, что если указать не список экспортируемого, а список не-экспортируемого, то предупреждений не будет. Не сильно хорошее, но решение.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.