У меня есть проект общей библиотеки, который построен из 4 статических библиотек (.a) и одного файла объекта (.o). Я пытаюсь добавить параметр -fvisibility=hidden, чтобы ограничить символы в выводе только теми, которые я помечаю в источнике с помощью __attribute__.
Я добавил параметр -fvisibility=hidden в параметры компиляции для проекта .so (который охватывает файл .o) и для проектов .a.
Символы в объектном файле, как и ожидалось, удаляются из окончательного .so. Однако символы из проектов .a все еще находятся в окончательном файле .so. Добавление параметра -fvisibility=hidden к команде ссылки .so не имеет никакого эффекта.
Что я делаю неправильно?
Моя цель здесь - удалить из .so все символы, кроме функций интерфейса к библиотеке.
РЕДАКТИРОВАТЬ: я на самом деле использовал карту версий, чтобы решить эту проблему. Однако это требует постоянного обслуживания скрипта версии по мере изменения внешних символов. Принятый ответ дает лучшее представление.