видимость gcc во время компиляции или во время ссылки - PullRequest
4 голосов
/ 05 июля 2010

Я пытаюсь ограничить ABI разделяемой библиотеки, используя функцию fccibility gcc. Однако я не совсем понимаю, как правильно это сделать.

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

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

Может кто-нибудь объяснить мне это. Спасибо за ваше время.

1 Ответ

0 голосов
/ 05 июля 2010

Вы можете найти http://gcc.gnu.org/wiki/Visibility полезным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...