@Mimuss

Как работают библиотеки и как работает компилятор?

Какая разница между динамической и статической библиотеками? Что такое исполняемый файл? Что такое транслятор, линковщик? До сих пор не задавался такими вопросы, пока не понадобилось скомпилировать библиотеку из исходного кода и связать с моим проектом. Такая пустяковая задача родила во мне еще больше вопросов при поиске ее решения, так как элементарно не мог ответить на вопрос, что такое компилятор (для меня он был наподобие черного ящика).
Крайне нуждаюсь в статьях или книгах по подобной тематике.
  • Вопрос задан
  • 786 просмотров
Решения вопроса 1
jamakasi666
@jamakasi666
Просто IT'шник.
Если в кратце:
Динамическая библиотека - все зависимости(библиотеки - dll\so\dylib) не входят в состав библиотеки\исполняемого файла. Т.е. для работы будет необходимо чтобы они были в системе или лежали рядом. Плюс в том что библиотеки можно обновлять(как правило, часто это невозможно), скомпилированная библиотека\исполняемый файл имеет малый размер.
Статическая библиотека - все зависимости (библиотеки - lib\a), во время компиляции "вклеиваются" в твою библиотеку\исполняемый файл. Плюс в том что все зависимости(библиотеки) внедрены внутрь и какбы конечному пользователю нужно меньше телодвижений что бы все заработало. Размер библиотеки\исполняемого файла становится огромным.
Исполняемый файл - это уже бинарная (двоичная) программа которую сможет выполнить твой CPU.
Транслятор - сильно грубо говоря это переводчик. Переводит 1 язык в другой. К примеру он переводит человекочитаемый исходный код на "С++" в "С" или асемблер или машинный код.
Линковщик(он же компановщик) - опять же сильно грубо это утилита которая смотрит весь исходный код и связи с библиотеками после составляет так называемую таблицу символов в которой обозначает где находится и как называется функция из другой библиотеки. Так же он обозначает и экспортируемые функции которые смогут увидеть другие библиотеки.
Компилятор - в кратце это савокупность утилит запускаемых в определенном порядке чтобы из исходного кода получить машинный код который сможет выполниться на CPU. Этапов в нем много в т.ч. в него входит линковка и трансляция.

Если хочется разобраться в этом нормально и понимать все абсолютно верно а не так как описал я то смотри рекомендации которые выше уже дали по "книге дракона". Я тебе описал все это сильно грубо чтобы просто представлять что это.
PS внес поправочку копипасты =) Даниил Демидко
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Системное программирование в среде Windows 3-е издание. (Джонсон М. Харт) - Глава "Динамически компонуемые библиотеки"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы