В чем разница между dll и lib

Обновлено: 21.11.2024

Библиотека – это набор ресурсов, которые можно использовать для разработки приложений. Библиотека обычно состоит из подпрограмм, функций, классов, значений и типов. В процессе связывания (обычно выполняется компоновщиком) библиотеки и исполняемые файлы ссылаются друг на друга. Файлы библиотеки делятся на статические и динамические библиотеки в зависимости от времени загрузки подпрограмм в целевое приложение. Соответственно, LIB-файлы — это статически связанные библиотеки, а DLL-файлы — это динамически связанные библиотеки.

Что такое DLL?

Библиотека динамической компоновки (более известная как DLL) — это реализация совместно используемой библиотеки, разработанная Microsoft. Он использует расширения .dll, .ocx или .drv и используется в операционных системах Microsoft Windows и OS/2. .dll используется обычными файлами DLL. И расширение .ocx используется библиотеками, которые содержат элементы управления ActiveX, а расширение .drv используется устаревшими файлами системных драйверов. Формат файла DLL такой же, как у файлов Windows EXE (переносимые исполняемые файлы в 32-разрядной/64-разрядной версии Windows и новые исполняемые файлы в 16-разрядной версии Windows). Следовательно, любая комбинация кода, данных и ресурсов может содержаться в файлах DLL (точно так же, как и в файлах EXE). На самом деле файлы данных в формате DLL называются ресурсными DLL. Библиотеки значков (с расширением .icl) и файлы шрифтов (с расширениями .fon и .fot) являются примерами библиотек DLL ресурсов.

Компоненты, называемые разделами, составляют библиотеку DLL, и каждый раздел имеет свои собственные атрибуты, такие как доступ только для чтения/запись и исполняемый/неисполняемый. Разделы кода являются исполняемыми, а разделы данных неисполняемыми. Разделы кода являются общими, а разделы данных — частными. Это означает, что все процессы, использующие DLL, будут использовать одну и ту же копию кода, а каждый процесс будет иметь собственную копию данных. Основной динамической библиотекой для Windows является kernel32.dll, которая содержит базовые функции (функции, связанные с файлами и памятью) в Windows. COM (компонентная объектная модель) является расширением DLL для ООП (объектно-ориентированного программирования). Обычные DLL проще в использовании, чем COM-файлы.

Что такое LIB?

Файлы LIB представляют собой статические библиотеки (также известные как статически связанные библиотеки). Файлы LIB содержат набор подпрограмм, внешних функций и переменных. Файлы LIB разрешаются во время компиляции (в отличие от времени выполнения). Код фактически копируется в целевое приложение. Компилятор, компоновщик или компоновщик сделают это разрешение и создадут объектный файл и исполняемый файл. Этот процесс называется процессом статической сборки.

В чем разница между DLL и LIB?

Библиотеки LIB можно вызывать во время компиляции, а библиотеки DLL можно вызывать только во время выполнения. Файлы LIB значительно больше, чем файлы DLL. Очень распространенной проблемой с файлами DLL является проблема с версиями. Это происходит, когда код DLL изменен и приложение использует неправильную версию DLL. Это не проблема, связанная с файлами LIB. С точки зрения возможности повторного использования при написании новых версий систем или совершенно новых приложений библиотеки DLL всегда лучше, чем библиотеки LIB.

Я очень мало знаю о библиотеках DLL и LIB, кроме того, что они содержат жизненно важный код, необходимый для правильной работы программы — библиотеки. Но почему компиляторы вообще их генерируют? Не проще ли было бы просто включить весь код в один исполняемый файл? И в чем разница между DLL и LIB?

5 ответов 5

Существуют статические библиотеки (LIB) и динамические библиотеки (DLL), но обратите внимание, что файлы .LIB могут быть либо статическими библиотеками (содержащими объектные файлы), либо библиотеками импорта (содержащими символы, позволяющие компоновщику связываться с DLL).

Библиотеки используются, потому что у вас может быть код, который вы хотите использовать во многих программах. Например, если вы напишете функцию, которая подсчитывает количество символов в строке, эта функция будет полезна во многих программах. Как только вы получите эту функцию, работающую правильно, вы не захотите перекомпилировать код каждый раз, когда вы ее используете, поэтому вы помещаете исполняемый код для этой функции в библиотеку, а компоновщик может извлечь и вставить скомпилированный код в вашу программу. . По этой причине статические библиотеки иногда называют «архивами».

Динамические библиотеки делают еще один шаг вперед. Кажется расточительным иметь несколько копий библиотечных функций, занимающих место в каждой из программ. Почему они не могут использовать одну копию функции? Для этого есть динамические библиотеки. Вместо того, чтобы встраивать код библиотеки в вашу программу при ее компиляции, ее можно запускать, отображая ее в вашу программу по мере ее загрузки в память. Несколько запущенных одновременно программ, использующих одни и те же функции, могут совместно использовать одну копию, экономя память. На самом деле вы можете загружать динамические библиотеки только по мере необходимости, в зависимости от пути по вашему коду. Нет смысла в том, чтобы подпрограммы принтера занимали память, если вы не печатаете.С другой стороны, это означает, что вы должны иметь копию динамической библиотеки, установленную на каждой машине, на которой работает ваша программа. Это создает свой собственный набор проблем.

Например, почти каждой программе, написанной на «C», потребуются функции из библиотеки, называемой «библиотекой времени выполнения C», хотя немногим программам потребуются все функции. Среда выполнения C поставляется как в статической, так и в динамической версиях, поэтому вы можете определить, какую версию использует ваша программа, в зависимости от конкретных потребностей.

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

Читатели, которые читают это, также читают:

LIB и DLL — это библиотеки, которые используются для создания кода для различных программ/приложений. Они используются дизайнерами и кодерами, а не обычными пользователями компьютеров. Для открытия этих типов файлов требуется код или какая-либо конкретная программа или программное обеспечение.

LIB и DLL

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

LIB — это статическая библиотека ссылок, которая работает в соответствии с временем операционной системы. На электронном устройстве она размещается в виде единого файла, который сравнительно больше, чем другие библиотеки, но благодаря этому аспекту избавляет пользователя от проблем с версиями.

DLL — это динамически подключаемая библиотека, которая компилируется загрузчиком во время выполнения. Это экономит память и место на компьютере или диске, что является преимуществом по сравнению с любой библиотекой статических ссылок, такой как LIB. Библиотеки DLL считаются лучше, чем LIB, из-за возможности повторного использования, производительности и занимаемого места.

Таблица сравнения LIB и DLL

Что такое LIB?

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

Библиотеки LIB не открываются вручную. Для их взлома требуется определенное программное обеспечение, которое зависит от программы и версии. Поскольку все компоненты в этой библиотеке скомпилированы в один большой файл, она не решает проблему управления различными переменными, функциями и подмаршрутами, которые в ней находятся.

Они немного больше, чем другие библиотеки, и код копируется из основного приложения, в отличие от динамически подключаемых библиотек, где код может быть связан. Если есть какие-либо изменения в выполнении программы, необходимо внести изменения или редактирование, чтобы она работала. Потребуется повторное связывание и перекомпиляция.

Что такое DLL?

DLL — это динамически подключаемая библиотека, которая подключается загрузчиком во время выполнения. Это дает ей преимущество перед LIB, которая является статической библиотекой. Они компилируются во время выполнения, не только экономя память, но и повышая производительность.

Основная цель DLL — открывать и выполнять функции других различных программ. Они не могут запускаться напрямую, и для их открытия требуется дополнительный код. Конечно, они полезны, но эти типы файлов обычно не открываются, кроме кодеров или других технических специалистов, поскольку в них нет ничего особенного для пользователя, и любая ошибка при их просмотре приведет к проблеме.

Файлы DLL сравниваются с файлами EXE, но основное различие между ними заключается в том, что файлы DLL нельзя открывать и запускать напрямую, как EXE. Они очень полезны для программистов, поскольку им не нужно писать код с нуля и использовать предыдущий код для экономии времени и энергии.

Основные различия между LIB и DLL

  1. Файлы DLL можно использовать в разных программах, но файлы LIB нельзя использовать между программами.
  2. Производительность файлов также различается. Файлы DLL обеспечивают лучшую производительность во время выполнения программы. LIB, с другой стороны, требует больше времени для открытия, поскольку он соответствует файлам, когда они щелкают, а не статически, как LIB.
  3. В DLL можно напрямую ссылаться на свой ранее установленный код, но в LIB код должен быть скопирован человеком. Это дает DLL преимущество перед LIB.
  4. DLL совместим со многими файлами. Он не один, как другие, например, Pdf и т. д. LIB, с другой стороны, LIB, как правило, отрывается в большом большом файле.
  5. Из-за разных файлов в DLL могут возникнуть проблемы с управлением версиями, то есть с управлением этими различными файлами. Поскольку LIB представляет собой один большой файл, эта конкретная проблема не возникает.

Заключение

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

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

Этот форум перенесен в раздел вопросов и ответов Майкрософт. Посетите Microsoft Q&A, чтобы публиковать новые вопросы.

Отвечает:

Вопрос

Когда я генерирую *.dll, также создается файл *.lib. Когда я создаю статическую библиотеку, создается только один файл *.lib.
В чем разница между этими двумя файлами *.lib?
Кстати: есть ли какой-нибудь инструмент, который я мог бы использовать для анализа dll и библиотеки?

Большое спасибо.
Сэм Уитвики

Ответы

Библиотека .lib, сопровождающая .dll, содержит только таблицу импорта для .dll; сама .dll содержит фактические объектные файлы.

Как говорит ildjarn, файл .lib, сопровождающий dll, содержит только функции и их смещение, код будет загружаться в модуль DLL в пространстве процесса при запуске. И файл .lib, сгенерированный библиотекой статической ссылки, содержит код функции, и он будет загружен в проект во время компиляции.

Если вы хотите просмотреть содержимое файлов .dll и .lib, вы можете использовать инструмент Dumpbin.exe. Дополнительные сведения об инструменте Dumpbin см. в статье MSDN по следующей ссылке:

С наилучшими пожеланиями,
Нэнси Пожалуйста, не забудьте пометить ответы как ответы, если они помогают, и снять отметку, если они бесполезны.
Добро пожаловать в универсальную структуру кода! Если у вас есть какие-либо отзывы, сообщите нам.

Все ответы

Библиотека .lib, сопровождающая .dll, содержит только таблицу импорта для .dll; сама .dll содержит фактические объектные файлы.

Как говорит ildjarn, файл .lib, сопровождающий dll, содержит только функции и их смещение, код будет загружаться в модуль DLL в пространстве процесса при запуске. И файл .lib, сгенерированный библиотекой статической ссылки, содержит код функции, и он будет загружен в проект во время компиляции.

Если вы хотите просмотреть содержимое файлов .dll и .lib, вы можете использовать инструмент Dumpbin.exe. Дополнительные сведения об инструменте Dumpbin см. в статье MSDN по следующей ссылке:

С наилучшими пожеланиями,
Нэнси Пожалуйста, не забудьте пометить ответы как ответы, если они помогают, и снять отметку, если они бесполезны.
Добро пожаловать в универсальную структуру кода! Если у вас есть какие-либо отзывы, сообщите нам.

>Библиотека .lib, сопровождающая .dll, содержит только таблицу импорта
>для .dll; сама .dll содержит фактические объектные файлы.

>Библиотека .lib, создаваемая при создании статической библиотеки, содержит
>объектные файлы.

Это может потребовать небольшого пояснения или расширения:

Статическая библиотека содержит предварительно связываемый (перемещаемый) объектный код с
неразрешенными ссылками, заполнителями и т. д. Она еще не находится в исполняемой
форме. По сути, это коллекция (библиотека) объектных модулей
в том виде, в каком они получены из компилятора. (файлы *.obj)

Читайте также: