Чем отличаются статические и динамические библиотеки

A.1 – Статические и динамические библиотеки

Библиотека – это пакет кода, который предназначен для повторного использования многими программами. Обычно библиотека C++ состоит из двух частей:

Некоторые библиотеки могут быть разделены на несколько файлов и/или иметь несколько файлов заголовков.

Библиотеки предварительно скомпилированы по нескольким причинам. Во-первых, поскольку библиотеки меняются редко, их не нужно часто перекомпилировать. Было бы пустой тратой времени перекомпилировать библиотеку каждый раз, когда вы пишете программу, которая ее использует. Во-вторых, поскольку предварительно скомпилированные объекты представлены машинным кодом, люди не могут получить доступ к исходному коду или изменить его, что важно для предприятий или людей, которые не хотят делать свой исходный код доступным из соображений интеллектуальной собственности.

Существует два типа библиотек: статические библиотеки и динамические библиотеки.

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

Установка и использование библиотек

Теперь, когда вы знаете о различных типах библиотек, давайте поговорим о том, как на самом деле использовать библиотеки в вашей программе. Установка библиотеки на C++ обычно состоит из 4 шагов:

После того, как библиотека установлена, ​​и среда IDE знает, где ее искать, обычно необходимо выполнить следующие 3 шага для каждого проекта, который хочет использовать библиотеку:

Шаги 3-5 включают настройку вашей IDE – к счастью, когда дело доходит до выполнения этих вещей, почти все IDE работают одинаково. К сожалению, поскольку каждая среда IDE имеет свой интерфейс, самая сложная часть этого процесса – просто определить правильное место для выполнения каждого из этих шагов. Следовательно, в следующих нескольких уроках этого раздела мы расскажем, как выполнить все эти шаги как для Visual Studio, так и для Code::Blocks. Если вы используете другую IDE, прочтите оба урока – к тому времени, когда вы закончите, у вас должно быть достаточно информации, чтобы сделать то же самое с вашей собственной IDE и небольшим гуглением.

Источник

Статические и динамические библиотеки

Обновл. 15 Сен 2021 |

Библиотека — это «сборник» кода, который можно многократно использовать в самых разных программах. Как правило, библиотека в языке C++ состоит из двух частей:

Заголовочный файл, который объявляет функционал библиотеки.

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

Некоторые библиотеки могут быть разбиты на несколько файлов и/или иметь несколько заголовочных файлов.

Типы библиотек

Библиотеки предварительно компилируют по нескольким причинам. Во-первых, их код редко меняется. Было бы напрасной тратой времени повторно компилировать библиотеку каждый раз при её использовании в новой программе. Во-вторых, поскольку весь код предварительно скомпилирован в машинный язык, то это предотвращает получение доступа к исходному коду (и его изменение) сторонними лицами. Этот пункт важен для предприятий/людей, которые не хотят, чтобы результат их труда (исходный код) был доступен всем.

Есть 2 типа библиотек: статические и динамические.

Статическая библиотека (или «архив») состоит из подпрограмм, которые непосредственно компилируются и линкуются с вашей программой. При компиляции программы, которая использует статическую библиотеку, весь функционал статической библиотеки (тот, что использует ваша программа) становится частью вашего исполняемого файла. В Windows статические библиотеки имеют расширение .lib (сокр. от «library»), тогда как в Linux статические библиотеки имеют расширение .a (сокр. от «archive»).

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

Динамическая библиотека (или «общая библиотека») состоит из подпрограмм, которые подгружаются в вашу программу во время её выполнения. При компиляции программы, которая использует динамическую библиотеку, эта библиотека не становится частью вашего исполняемого файла — она ​​так и остается отдельным модулем. В Windows динамические библиотеки имеют расширение .dll (сокр. от «dynamic link library»), тогда как в Linux динамические библиотеки имеют расширение .so (сокр. от «shared object»). Одним из преимуществ динамических библиотек является то, что разные программы могут совместно использовать одну копию динамической библиотеки, что значительно экономит используемое пространство. Еще одним преимуществом динамической библиотеки является то, что её можно обновить ​​до более новой версии без необходимости перекомпиляции всех исполняемых файлов, которые её используют.

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

Установка библиотек

Теперь, когда мы уже разобрались с типами библиотек, давайте поговорим о том, как их использовать в наших программах. Установка библиотеки в языке C++ состоит из четырех последовательных шагов:

Шаг №2: Установите библиотеку. В Linux это делается путем вызова менеджера пакетов, а дальше он всё делает сам. В Windows вам придется разархивировать библиотеку самостоятельно в любую выбранную вами папку. Рекомендуется хранить все используемые библиотеки в одном месте для быстрого доступа к ним. Например, создайте папку Libs ( C:\Libs ) и выделяйте для каждой (используемой вами) библиотеки свою отдельную подпапку.

Использование библиотек

Как только библиотека установлена, ​​и ваша IDE знает, где искать её файлы, то для того, чтобы вы могли использовать эту библиотеку в ваших проектах, вам необходимо выполнить следующие 3 шага:

Шаг №5: Если вы используете статические библиотеки или библиотеки импорта, сообщите линкеру, какие файлы библиотеки нужно связать с вашей программой.

Шаг №6: Подключите заголовочные файлы библиотеки к вашей программе.

Заключение

Шаги №3-№5 включают настройку вашей IDE. К счастью, почти все IDE работают одинаково, когда дело доходит до выполнения подобных задач. На следующем уроке мы рассмотрим, как выполнить данные шаги в Visual Studio.

Поделиться в социальных сетях:

Источник

Чем отличается динамическая библиотека от статической?

Никак не могу понять чем отличается динамическая библиотека от статической. По идее же и там и там код. Почему одну нельзя преобразовать в другую. К примеру влинковать в бинарик функции из динамической библиотеки.

Если что я имею ввиду разницу принципиальную. То что динамические можно подгрузить в рантайме это и так понятно.

Простой 6 комментариев

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

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

Динамическая библиотека это фактически исполняемый файл (т.е. DLL и EXE в Windows имеют одинаковый формат). Динамическая линковка запускается в момент создания процесса (когда вы запускаете исполняемый файл на выполнение), линкуются между собой несколько исполняемых файлов каждый раз, когда создается новый процесс. Так же возможна динамическая линковка уже после запуска, т.е. новая библиотека может быть подгружена в адресное пространство ужа работающего процесса.

Источник

Русские Блоги

Разница между статическими и динамическими библиотеками

Что такое библиотека

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

Так называемая статическая, динамическая относится к ссылке. Напомним, что шаги для компиляции программы в исполняемую программу:

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Рисунок 1. Процесс компиляции

Статическая библиотека

Напишите несколько простых четырех арифметических классов C ++ и скомпилируйте их в статические библиотеки для использования другими. Заголовочные файлы следующие:

Нажмите Ctrl + C, чтобы скопировать код

Нажмите Ctrl + C, чтобы скопировать код

Использовать под LinuxarИнструменты, использовать против Windowslib.exe, Сжать целевые файлы вместе, нумеровать и индексировать их для удобства поиска и поиска. Основные шаги по созданию статической библиотеки показаны на рисунке:

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Рисунок 2. Процесс создания статической библиотеки

Создавайте и используйте статические библиотеки под Linux

Правила именования статических библиотек Linux

Создать статическую библиотеку (.a)

Благодаря вышеописанному процессу мы можем узнать, что процесс создания статической библиотеки в Linux выглядит следующим образом:

Создать статическую библиотекуlibstaticmath.a

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Рисунок 3. Использование статических библиотек в Linux

Крупные проекты будут писать make-файлы (CMake и другие инструменты управления проектами) для генерации статических библиотек, слишком много проблем для ввода нескольких команд.

Использовать статическую библиотеку

Напишите тестовый код, используя статическую библиотеку, созданную выше:

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Создавать и использовать статические библиотеки под Windows

Создать статическую библиотеку (.lib)

Если вы используете командную строку VS для создания статической библиотеки, вы также можете создать программу в два этапа:

Конечно, мы обычно не используем его таким образом, более удобно использовать настройки проекта VS. При создании консольной программы win32 проверьте тип статической библиотеки, откройте проект «Панель свойств» è «Свойства конфигурации» è «Общие» и выберите статическую библиотеку для типа конфигурации.

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Рисунок 4. Настройки свойств проекта статической библиотеки VS

Проект сборки может генерировать статическую библиотеку.

Использовать статическую библиотеку

Тестовый код такой же, как и в Linux. Есть 3 способа использования:

Метод первый:

Используйте метод статической библиотеки в VS:

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Чтобы добавить каталог файла заголовка StaticMath.h, необходимо изменить путь к каталогу включения. Откройте проект «Панель свойств», «Свойства конфигурации», «C / C ++», «Общие», в значении атрибута «Дополнительный включаемый каталог» введите путь к каталогу, в котором находится заголовочный файл StaticMath.h, или перейдите к каталогу.

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Скомпилируйте и запустите ОК.Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Если указанная статическая библиотека не является подпроектом в том же решении, но использует файлы статической библиотеки lib и заголовочные файлы, предоставленные третьей стороной, описанный выше метод не может быть установлен. Есть также два способа настройки возможны.

Способ второй:

Откройте проект «Панель свойств» è «Свойства конфигурации» è «Компоновщик» è «Командная строка» и введите полный путь статической библиотеки.

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Метод третий:

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Динамическая библиотека

Благодаря введению выше, я обнаружил, что статические библиотеки просты в использовании и понимании, а также достигают цели повторного использования кода, так зачем нам динамические библиотеки?

Зачем вам динамическая библиотека?

Зачем мне динамическая библиотека, на самом деле, это связано с характеристиками статической библиотеки.

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

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

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Краткое описание возможностей динамической библиотеки:

Windows и Linux имеют разные форматы исполняемых файлов, и существуют некоторые различия при создании динамических библиотек.

Отличается от создания статической библиотеки, не требует инструментов упаковки (ar, lib.exe), вы можете напрямую использовать компилятор для создания динамической библиотеки.

Создавайте и используйте динамические библиотеки под Linux

Правила именования динамических библиотек в Linux

Имя библиотеки динамических ссылок:libxxx.soПрефиксlib, С суффиксом по имени.so

Создать динамическую библиотеку (.so)

Напишите четыре арифметических динамических библиотечных кода:

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

-fPIC создает позиционно-независимый код (рис., позиционно-независимый код) для совместного использования несколькими приложениями.

-shared указывает на создание библиотеки динамических ссылок.

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Фактически, два вышеуказанных шага можно объединить в одну команду:

Используйте динамические библиотеки

Напишите тестовый код с использованием динамической библиотеки:

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Ссылка на динамическую библиотеку для компиляции в исполняемый файл (аналогично статической библиотеке):

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Вы можете догадаться, что это потому, что динамическая библиотека и тестовая программа не являются одним и тем же каталогом, поэтому давайте проверим, так ли это:

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

1) Когда система загружает исполняемый код, она может знать имя библиотеки, от которой зависит, но она также должна знать абсолютный путь. В это время необходим системный динамический загрузчик (динамический компоновщик / загрузчик).

Как заставить систему найти это:

① Отредактируйте файл /etc/ld.so.conf и добавьте путь к каталогу, в котором находится файл библиотеки.

L Запустите ldconfig, команда перестроит файл /etc/ld.so.cache

Мы копируем созданную динамическую библиотеку в / usr / lib, а затем запускаем тестовую программу.

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Создавайте и используйте динамические библиотеки под Windows

Создать динамическую библиотеку (.dll)

По сравнению с Linux создание динамических библиотек под Windows немного сложнее. Во-первых, вам нужна функция DllMain для создания точки входа (при создании консольной программы win32 проверка типа DLL автоматически сгенерирует этот файл):

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Обычно в объявлении экспортируемой функции должно быть ключевое слово _declspec (dllexport):

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

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

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Проект сборки может генерировать динамическую библиотеку.

Используйте динамические библиотеки

Создайте консольную тестовую программу win32:

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Метод первый:

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Скомпилируйте и запустите ОК.

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Способ второй:

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Может быть, у всех есть вопрос, почему в динамической библиотеке есть файл DynamicLibrary.lib? То есть, будь то библиотека статических ссылок или библиотека динамических ссылок, наконец, есть файлы lib, так в чем же разница между ними? На самом деле, это совершенно разные вещи.

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

Отображение вызова динамической библиотеки

Показать и вызвать динамическую библиотеку в Linux

#include предоставляет следующие интерфейсы:

Отображение и вызов динамической библиотеки под Windows

Приложение должно выполнить вызов функции для отображения загруженной DLL во время выполнения. Чтобы отобразить ссылку на DLL, приложение должно:

Примечание по вызову динамической библиотеки C ++

Для C ++ ситуация немного сложнее. Трудности в явной загрузке динамической библиотеки C ++Отчасти потому чтоC++Имя искаженияДругая часть, потому что подходящийAPIЗагрузить классВ C ++ вы можете захотеть использовать класс в библиотеке, и это требует создания экземпляра класса, что нелегко сделать.

name manglingЭто можно решить с помощью внешнего «C». C ++ имеет специальное ключевое слово для объявления функций, которые используют привязку C: extern «C». Функции, объявленные с помощью extern «C», будут использовать имя функции в качестве имени символа, как и функция C. Следовательно, только внешние функции могут быть объявлены как внешние «C» и не могут быть перегружены. Несмотря на множество ограничений, внешние функции «C» все еще очень полезны, потому что они могут быть динамически загружены с помощью dlopen, таких как функции C. После добавления префикса к определителю extern «C» это не означает, что код C ++ не может быть использован в функции. Вместо этого это все еще полная функция C ++, которая может использовать любые функции C ++ и различные типы параметров.

«Явно» с использованием C ++Класс в динамической библиотекеЭто очень утомительно и опасно, поэтому, если вы можете использовать «неявный», не используйте «явный», если вы можете использовать статический, не используйте динамический.

Вложение: связанные с Linux команды библиотеки

g ++ (gcc) опции компиляции

команда нм

Иногда вам может понадобиться проверить, какие функции находятся в библиотеке,nmкомандаВы можете распечатать все символы, используемые в библиотеке. Библиотека может быть статической или динамической. Есть много символов, перечисленных в нм, есть три общих:

лдд команда

lddКоманда для просмотра общей библиотеки, от которой зависит исполняемая программаНапример, четыре арифметических динамических библиотеки, которые мы написали, зависят от следующих библиотек:

Чем отличаются статические и динамические библиотеки. Смотреть фото Чем отличаются статические и динамические библиотеки. Смотреть картинку Чем отличаются статические и динамические библиотеки. Картинка про Чем отличаются статические и динамические библиотеки. Фото Чем отличаются статические и динамические библиотеки

подводить итоги

Разница между ними заключается в том, чтоМомент загрузки кода отличается

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

Источник

Динамические и статические библиотеки в С++

В моем стремлении изучить С++ я столкнулся с динамическими и статическими библиотеками.

Я обычно получаю их суть: скомпилированный код для включения в другие программы.

Однако я хотел бы узнать несколько вещей о них:

Все, что я нашел в отношении библиотек, похоже, предназначено для тех, кто уже знает, как их использовать. Я, однако, не знаю. (Но хотелось бы!)

(Я также должен отметить, что я использую Mac OS X, и хотя предпочел бы оставаться нейтральным или ориентированным на IDE, я использую QtCreator/Netbeans)

ОТВЕТЫ

Ответ 1

Записывает ли они какую-либо отличную от обычной программу на С++ минус функция main()?

Как скомпилированная программа становится библиотекой? Это, очевидно, не исполняемый файл, поэтому как мне повернуть, скажем ‘test.cpp’ в ‘test.dll’?

Как только я получу его в своем формате, как включить его в другую программу?

Сначала создайте файл заголовка, чтобы другая программа могла #include знать, какие функции могут использоваться в вашем dylib.

Есть ли стандартное место для их размещения, так что любые компиляторы/линкеры в них могут легко найти их?

В чем разница (технически и практически) между динамической и статической библиотекой?

В принципе, для статического lib вся библиотека встроена в файл, к которому он привязан.

Ответ 2

Записывает ли они какую-либо отличную от обычной программу на С++ минус функция main()?

За исключением очевидного различия в том, что библиотека предоставляет услуги для использования других программ, обычно (*) нет разницы.

Как скомпилированная программа становится библиотекой? Это, очевидно, не исполняемый файл, поэтому как мне повернуть, скажем ‘test.cpp’ в ‘test.dll’?

Как только я получаю его в своем формате, как его включить в другую программу?

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

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

Если вы отправляете библиотеку в UNIX, общим местом обычно является /usr/lib (или /usr/local/lib ), это также где gcc ищет по умолчанию.

В чем разница (технически и практически) между динамической и статической библиотекой?

Когда вы связываете программу со статическими библиотеками, код библиотек заканчивается в вашем исполняемом файле. Практически это делает ваш исполняемый файл более крупным и затрудняет обновление/исправление статической библиотеки по очевидным причинам (требуется новая версия исполняемого файла).

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

Как использовать сторонние библиотеки в моем коде?

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

В большинстве проектов с открытым исходным кодом есть readme, который дает более подробные инструкции, я бы предложил взглянуть на него, если он есть.

Ответ 3

Является ли запись [библиотеки] отличной от обычной программы на С++, минус функция main()?

Однако проектирование библиотек намного сложнее, потому что у вас нет контроля над кодом, который вызывает вас. Библиотеки должны быть более надежными в отношении отказа, чем обычный код. Вы не можете указать delete указатели, которые кто-то передает вашей функции. Вы не можете сказать, какие макросы будут возиться с вашим кодом. Вы также не можете случайно загрязнить глобальное пространство имен (например, не помещайте using namespace std в начало ваших файлов заголовков).

Как скомпилированная программа становится библиотекой? Это, очевидно, не исполняемый файл, поэтому как мне повернуть, скажем ‘test.cpp’ в ‘test.dll’?

Как только я получу его в своем формате, как включить его в другую программу?

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

Есть ли стандартное место для их размещения, так что любые компиляторы/линкеры в них могут легко найти их?

В чем разница (технически и практически) между динамической и статической библиотекой?

Ответ 4

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

Ответ 5

Я пишу это, чтобы быть более прагматичным, чем технически правильным. Этого достаточно, чтобы дать вам общее представление о том, что вам нужно.

Записывает ли они какую-либо отличную от обычной программу на С++ минус функция main()?

Для статической библиотеки разница между ними действительно невелика.

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

Для динамической библиотеки вам также необходимо разрешить все символы, что означает, что библиотека не может зависеть от функции или переменной, которая поступает извне библиотеки. Если в моей библиотеке используется функция foo(), мне нужно включить foo() в мою библиотеку, написав ее самостоятельно или связав ее с другой библиотекой, которая ее поставляет. Я не могу использовать foo() и просто предполагаю, что пользователь моей библиотеки предоставит его. Компилятор не знает, как вызвать foo(), который еще не существует.

Как скомпилированная программа становится библиотекой? Это, очевидно, не исполняемый файл, поэтому как мне повернуть, скажем ‘test.cpp’ в ‘test.dll’?

Как только я получу его в своем формате, как включить его в другую программу?

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

Есть ли стандартное место для их размещения, так что любые компиляторы/линкеры в них могут легко найти их?

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

В чем разница (технически и практически) между динамической и статической библиотекой?

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

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

Как использовать сторонние библиотеки в своем коде

То же, что и вы, используя тот, который вы создали, как описано выше.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *