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