4882

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

Лекция

Информатика, кибернетика и программирование

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

Русский

2012-11-28

200.5 KB

37 чел.

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

Библиотеками называют «сборники» подпрограмм или объектов, как правило, ориентированных на решение набора близких по тематике задач. С точки зрения их организации и использования библиотеки бывают статическими и динамическими.

Статические библиотеки (static library) могут представлять собой набор исходных кодов, подключаемых программистом в свою программу, либо в виде заранее скомпилированных объектных файлов, связываемых вместе на этапе компиляции. В Windows такие файлы обычно имеют расширение <.lib>. В результате связывания со статической библиотекой, программа включает все используемые ей функции, что увеличивает её размер, но делает более автономной.

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

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

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

В Microsoft Visual Studio создание проекта для построения динамической библиотеки аналогично привычной процедуре создания проекта косольного приложения. Тип проекта Win32 Console Application, только теперь в мастере создания проекта нужно быдет выбрать пункт «DLL»:

В случае, если такой пункт в мастере отсутствует, можно создать обычный проект Console Application, а затем в свойствах проекта задать его тип:

Configuration Properties => General => Configuration Type : Dynamic Library (.dll)

Далее, добавим в проект модуль (т.е пару из h- и cpp- файлов) с таким кодом:

// dlltest.h

__declspec(dllexport) void display( const char * str );

// dlltest.cpp

#include "dlltest.h"

#include <iostream>

void display( const char * str )

{

  std::cout << str << std::endl;

}

Модификатор __declspec(dllexport) разрешает экспорт библиотекой указанной функции для использования её другими приложениями.

В результате сборки проекта будет создан файл динамической библиотеки с расширением <.dll>, а также файл библиотеки импорта с расширением <.lib>. Библиотека импорта предназначена для облегчения последующего использования динамической библиотеки. Несмотря на то, что расширение файла библиотеки импорта совпадает со стандартным расширением статических библиотек, путать их не стоит.

 

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

 

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

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

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

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

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

  1.  Подключить соответствующий заголовочный файл  “dlltest.h”. Для этого нужно либо использовать путь к файлу непосредственно в директиве #include (если проекты находятся в одной папке решения, то лучше использовать относительный путь), либо в свойствах проекта добавить путь к этому заголовочному файлу в разделе

Configuration Parameters =>  C/C++  =>  General => Additional Include Directories

  1.  Использовать файл соответствующей библиотеки импорта. Для этого можно воспользоваться директивой вида (здесь использован относительный путь к построенному lib-файлу).

#pragma comment( lib, "../Debug/dlltest.lib" )

Кроме того, можно добавить путь к файлу библиотеки импорта в свойствах проекта в разделе

Configuration Parameters => Linker => Input => Additional Dependencies

 Теперь создадим основной файл программы с таким содержимым:

#pragma comment( lib, "../Debug/dlltest.lib" )

#include "dlltest.h"

#include <iostream>

void main()

{

  display( "Hello" );

  system( "pause" );

}

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


 

А также другие работы, которые могут Вас заинтересовать

36356. Системы логико-программного управления 10.85 KB
  Системы логикопрограммного управления. В таких СУ алгоритм управления заложен в самом регуляторе. Применяются в управлении сравнительно простыми детерминированными технологическими процессами которые не подвергаются существенным возмущениям в которых жестко определена последовательность технологических операций их длительность и поэтому есть возможность заранее сформировать всю программу управления объектом. Робот классическая система логикопрограммного управления.
36357. Приведите методику линеаризации нелинейных дифференциальных уравнений 13.05 KB
  Если динамика элемента описывается линейным дифференциальным уравнением то этот элемент называется линейным если дифференциальное уравнение нелинейно то элемент называется нелинейным. Обычно линеаризация нелинейного уравнения производится относительно некоторого установившегося состояния элемента системы. Если дифференциальное уравнение элемента нелинейно изза нелинейности его статической характеристики то линеаризация уравнения сводится к замене нелинейной характеристики элемента x=фg некоторой линейной функцией x=gb. Аналитически эта...
36358. Приведите формулировки и поясните критерий устойчивости Найквиста для статических и астатических в разомкнутом состоянии САУ 111.43 KB
  Позволяет судить об устойчивости замкнутой системы по частотным свойствам разомкнутой системы ОПФ котй м. Следящая САУ ОПФ разомкнутой системы является статической: . Если разомкнутая система имеет ОПФ статического вида и устойчива то для асимптотической устойчивости замкнутой системы необходимо и достаточно чтобы годограф не охватывал точку 1 j0 при изменении частоты от 0 до ∞. Разомкнутая система имеет астатическую ОПФ: Нейтральная в разомкнутом состоянии система будет устойчива при...
36359. Математические модели объектов 12.39 KB
  Математические модели объектов. Математические модели являются частью математического обеспечения АСУТП и представляют собой описание объекта на формальном математическом языке уравнения формулы и т. Эти модели испся при оптимальном упри. По свойствам: статические модели позволяют рассчитывать параметры процесса без учета времени.
36360. Элементы математическое обеспечение САПР 13.31 KB
  По назначению и способам реализации математического обеспечения САПР делятся на: математические методы и построенные на их основе математические модели описывающие объекты проектирования формализованное описание технологии автоматизированного проектирования. При решении второй части должна быть описана вся логика технологии проектирования в том числе взаимодействие проектировщиков между собой на основе использования средств автоматизации. Эта задача решается на основе системного подхода и так как сейчас отсутствует теоретическая база для...
36361. Учет основного производства и контроль качества 35.9 KB
  Учет основного производства и контроль качества автоматизированная информационная система или АИС это совокупность различных программноаппаратных средств которые предназначены для автоматизации какойлибо деятельности связанной с передачей хранением и обработкой различной информации. Основное производство и контроль качества Финансовый учет Учет вспомогательного производства Движение ресурсов план производства и его выполнение план ремонтов строительство смет и затрат План и факт поставки договорные обязательства цены и ресурсы...
36362. Пирометр полного излучения. Принцип действия и используемые закономерности 52.41 KB
  Пирометр полного излучения. 6 В пирометрах полного излучения радиационных пирометрах используется зависимость температуры от величины суммарной энергии излучаемой объектом. Излучение от нагретого тела 1 пройдя через объектив 2 и диафрагму 3 попадает на чувствительный элемент 4 который поглощая энергию излучения вырабатывает пропорциональный ей а следовательно и температуре электрический сигнал который поступает в измерительную схему вторичный преобразователь и вторичный измерительный прибор градуированный в...
36363. Правила и особенности выполнения функциональной схемы автоматизации развернутым способом 28.82 KB
  Остальные технические средства автоматизации показывают условными графическими обозначениями в прямоугольниках расположенных в нижней части схемы. На схеме автоматизации буквенноцифровые обозначения приборов указывают в нижней части окружности овала или с правой стороны от него обозначения электроаппаратов справа от их условного графического обозначения. При этом обозначения технических средств присваивают по спецификации оборудования и составляют из цифрового обозначения соответствующего контура и буквенного...
36364. Принципы организации ИО. Метод исключения 12.04 KB
  агрегация и фильтрация информациипроцесс обобщения и выделения инфи. Выполнение этих принципов предусм комплексное использование массивов инф при решении разн задач в с.увеличение потока инф не способствует улучшению ее практич использования. При проектировании инф потоков в с.