Что такое файл .sa для общей библиотеки gcc? - PullRequest
0 голосов
/ 16 января 2012

Я видел статью в http://www.linuxjournal.com/article/1052, где она указывает:

"Общие библиотеки состоят из двух основных частей: заглушки и образа. Библиотека заглушек имеет расширение .sa. Заглушка - это библиотека, с которой будет связан исполняемый файл."

Но другая ссылка http://www.faqs.org/docs/Linux-HOWTO/GCC-HOWTO.html гласит

"файлы общей библиотеки ( .sa для a.out, .so для ELF)" - Я так понимаю, что .sa - это общая библиотека для использования с a.out формат и .so для использования с последним форматом ELF.

В связи с отсутствием ясности здесь я задаю вопрос - что такое файл .sa? А для чего заглушка?

Ответы [ 2 ]

3 голосов
/ 16 января 2012

Эта статья очень старая (1995 г.) и все еще имеет дело с общими библиотеками до ELF (так называемые a.out ).

Я забыл детали, но в те доисторические времена a.out разделяли библиотеки, где не было позиционно-независимого, поэтому каждый процесс имел, например, для загрузки разделяемой библиотеки libc в одном месте использование uselib (2) syscall - который устарел сегодня - (Сегодня два различных процесса mmap (2) это, как общий ELF объект, в разные адреса). Файл .sa также требовал соглашений для этого фиксированного места. Поэтому создание разделяемых библиотек было настоящим кошмаром: занятые ими сегменты фиксированных адресов должны были быть условно определены для всей системы или дистрибутива!

Но вам, на самом деле, должно быть все равно сегодня в 2012 году, если вы не интересуетесь историей (а затем вам нужно выкопать несколько старых исторических документов, которые может быть трудно найти). Все дистрибутивы, даже некоторые довольно старые (например, с 2004 года), используют формат ELF, который позволяет каждому процессу mmap свои общие библиотеки по своему усмотрению.

Сегодня вы можете исследовать с помощью /proc/1234/maps или /proc/1234/smaps карту памяти процесса pid 1234, и вы можете легко понять, что совместно используемые объекты ELF отображаются в разных местах. Читайте также о ASLR

3 голосов
/ 16 января 2012

Они, вероятно, оба правильны, но в своем собственном контексте.

Первая статья датируется 1995 годом, и это было примерно в то время, когда Linux принял ELF в мейнстриме (он существовал в середине 94, новам пришлось потрудиться, чтобы получить это).Фактически, в нем даже обсуждается тот факт, что ELF является относительным новичком:

Несмотря на то, что ELF (исполняемый и связывающий формат, разработанный для Unix SVR4), который делает создание общих библиотек тривиальным, чуть болееhorizon, текущие разделяемые библиотеки a.out DLL, возможно, потребуется поддерживать в течение некоторого времени.

Так что, вероятно, правильно, что все, что он знал или заботился в то время, был формат a.out.

HowTo датирован несколько позже, как 1999, и обсуждает различия междуa.out и ELF, поэтому я бы посчитал это более надежным источником.На тот момент ELF был основным направлением в течение нескольких лет.

Конечно, это относительное сравнение.Более надежному источнику еще более 10 лет, и он говорит о gcc 2.7, как будто он самый последний и самый лучший, тогда как на самом деле мы хорошо продвинулись до 4.6.

Возможно, вы захотите найти что-тонемного новее.

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