Я пытаюсь ограничить ABI разделяемой библиотеки, используя функцию fccibility gcc. Однако я не совсем понимаю, как правильно это сделать.
Мой make-файл организует процесс сборки в два этапа. На первом этапе все файлы .cpp создаются в объектных файлах с использованием некоторых параметров gcc. Затем все объектные файлы связаны друг с другом с помощью другого набора параметров gcc и ld. Из того, что я прочитал, видимость относится ко второму этапу. Однако это противоречит результатам, которые я наблюдаю. Если я добавлю fvisibility = hidden к параметрам времени компиляции, результат будет таким, как ожидалось, nm -D сообщит о гораздо меньшем наборе экспортируемых символов. Напротив, если я добавлю его к параметрам времени ссылки, это не повлияет на сборку.
При поиске объяснения я сравнил объектные файлы, созданные с и без видимости. Разница, кажется, в адресах символов внутри объектного файла. Однако я не знаю, как эта разница в адресах передает сообщение компоновщику, чтобы он мог скрыть символы в одном из случаев и раскрыть их в другом.
Может кто-нибудь объяснить мне это. Спасибо за ваше время.