4882

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

Лекция

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

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

Русский

2012-11-28

200.5 KB

39 чел.

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

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

Статические библиотеки (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.


 

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

45874. Виды механической обработки материалов резанием 77.21 KB
  Виды обработки резанием Согласно действующему в нашей стране стандарту ГОСТ 25761 83 все виды механической обработки металлов и материалов резанием подразделяются на лезвийную и абразивную обработку. К лезвийной обработке относятся все виды обработки резанием которые осуществляются лезвийным инструментом: точение растачивание долбление сверление зенкерование развертывание фрезерование протягивание. Фрезерование применяют для обработки плоскостей пазов с прямолинейным и винтовым направлением шлицев тел вращения разрезки...
45875. Тепловые явления при резании. Баланс теплоты при резании металлов. Температура резания 860.6 KB
  Температура резания. Исследования процессов теплообразования при резании позволили определить направление и интенсивность тепловых потоков градиенты температур в контактных областях и характеристики температурного поля в зоне резания деталью и окружающей средой а также получить качественное и количественное представление о тепловом балансе при резании различных материалов. Ребиндера установлено что более 995 работы резания переходит в тепло. Температура резания.
45876. Качество обрабатываемой поверхности и поверхностного слоя детали 61.08 KB
  Качество обрабатываемой поверхности и поверхностного слоя детали. Качество детали можно определить геометрическими и физикомеханическими характеристиками её поверхности и поверхностного слоя. Показатели качества детали: геометрические характеристики шероховатость волнистость отклонение формы; физикомеханические характеристики микротвёрдость остаточное напряжение структура. Упрочнение поверхностного слоя: при обработке детали под действием сил резания поверхностный слой металла испытывает упругопластическое деформирование.
45877. Изнашивание режущего инструмента в процессе резания. Критерии и кривые износа 168.52 KB
  Изнашивание режущего инструмента в процессе резания. В процессе работы инструмента в результате высокого контактного давления высокой температуры в зоне резания и большой относительной скорости перемещения происходит износ лезвий инструмента. Различают следующие виды износа: 1 Износ по задней поверхности инструмента. 2 Износ по передней поверхности инструмента.
45878. Критерии оптимизации режима резания при точении. Выбор инструментального материала для резцов 108.19 KB
  Критерии оптимизации режима резания при точении. Основной целью оптимизации является установление таких числовых значений элементов режима резания глубины резания подачи и скорости которые позволяют наиболее производительно с наименьшими затратами осуществлять механическую обработку детали и надежно обеспечить заданное качество обработки. Определить глубину резанияt: t = Dd 2 мм. При черновой обработке необходимо стремиться работать с максимально возможной в данных условиях глубиной резания равной всему припуску или большей части...
45879. Смазочно-охлаждающие технологические среды: назначение, требования, состав, методы отчистки и способы подачи 17.26 KB
  Способы подачи СОЖ: Полить струей жидкости на переднюю поверхность или через насадку с отверстием со стороны задней поверхности. Высоконапорная подача 152 МПа расход СОЖ уменьшается примерно в 20 раз. Функциональные свойства 1Под смазочным действием понимают способность СОЖ образовывать на контактных поверхностях инструмента на стружке и детали прочные пленки полностью или частично предотвращающие соприкосновение передней поверхности со стружкой и задних поверхностей с поверхностью резания. 2Охлаждающее дейстте СОЖ заключается в...
45880. Ультразвуковое резание. Резание с нагревом заготовки 15.43 KB
  Функции: непрерывно падают абразив в рабочий зазор и выносят оттуда частицы снятого металла; охлаждают инструмент в зоне резания. Механическая обработка с ультразвуковыми колебаниями является разновидностью резания с вибрациями. Позволяет ликвидировать нарост уменьшить объем зоны опережающей деформации и усадки стружки уменьшить силу резания. В отношении стойкости инструмента удовлетворяют результаты полученные только для быстрорежущего инструмента на низких режимах резания.
45881. Виды инструментальных материалов и ихприменяемость 16.07 KB
  Инструментальные стали. Стали применяют достаточно широко для изготовления корпусной и крепежноприсоединителыюй частей режущих инструментов а во многих случаях и их режущей части. Если инструмент работает при низких скоростях резания и не нагревается свыше 200220 С то его можно изготовлять из углеродистой инструментальной стали марок У7А У8А У10А У13А и др. Однако и в этом случае ввиду высокой критической скорости закалки эти стали прокаливаются на небольшую глубину и сердцевина инструмента остается вязкой.
45882. Виды токарных резцов. Особенность их применения. Способы соединения режущей пластины с державкой. Какие факторы определяют выбор резцов для токарных работ 50.15 KB
  В качестве режущего инструмента при точении используют резцы.Виды токарных резцов а проходные: 1 прямой 2 отогнутый 3 упорный; б подрезной; в канавочные: 1 для наружных канавок 2 для внутренних; г отрезной; д расточные: 1 для сквозных отверстий 2 для глухих; е резьбовые: 1 для наружных резьб 2 для внутренних; ж фасонный Проходные прямые резцы используются для их рекомендуется назначать для обтачивания гладких открытых цилиндрических поверхностей без уступов и ступеней. Проходные упорные резцы имеют угол в...