4882

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

Лекция

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

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

Русский

2012-11-28

200.5 KB

36 чел.

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

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

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


 

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

34484. Русская архитектура второй половины 18в. Деятельность М.Ф. Казакова 35 KB
  Казакова М. Казаков ученик архитектурной школы известного русского зодчего Д. возглавил школу и команду Казаков приобрел большой строительный опыт: участвовал в создании Головинского дворца Триумфальных ворот на Страстной площади в честь коронации Екатерины II галереи Оружейной палаты. Впервые дарование Казакова как архитектора раскрылось во время его участия в восстановлении Твери после пожара в мае 1763 г.
34485. Русское искусство к.18в.: Эпоха русского классицизма. Портретный и исторический жанр в творчестве А.П. Лосенко. М.Шибанов – зачинатель крестьянского бытового жанра 34.5 KB
  Лосенко. Лосенко 1737 1773 сын крестьянина ставший потом директором Академии. Будучи воспитанником Академии художеств Лосенко создал большую историческую картину на евангельский сюжет Чудесный улов . Лосенко много внимания уделял он живописным этюдам обнаженного тела; в результате появились известные полотна Авель и Каин .
34486. Русское искусство к.18в.: Исторический пейзаж в творчестве Ф.М. Матвеева, С.Ф. Щедрина. Городской пейзаж в творчестве Ф.Я. Алексеева 31 KB
  Классицизм стремился подчинить себе все виды живописи превратить их по сути дела в исторический жанр. Среди его работ наиболее известны серии видов Павловского Гатчинского и Петергофского парков виды Каменного острова и декоративные панно для Михайловского дворца в Петербурге. Щедрин запечатлел конкретные виды архитектурных сооружений но главную роль отводил не им а окружающей природе с которой человек и его творения оказываются в гармоническом слиянии. Виды уютны уравновешенны в них есть прелесть открытия нового чувства природы...
34487. Русское искусство к.18в.: Портрет в творчестве Ф.С. Рокотова, Д.Г. Левицкого, В.Л. Боровиковского 34 KB
  : Портрет в творчестве Ф. Новый этап в развитии портретного искусства которое теперь не ограничивается запечатлением индивидуальных черт человека но проникает в его внутренний мир ознаменовался творчеством Ф. Удивительная одаренность Рокотова быстро принесла ему известность и признание при дворе но лучшие произведения относятся к московскому периоду его жизни где расцвел талант художника в области интимных камерных портретов. Созданный Рокотовым тип портрета камерный интимный портрет составляет целую эпоху в русской портретной...
34488. Архитектура первой половины 19в.: от классицизма к ампиру. А.Н. Воронихин. Ж.Т. де Томон, А.Д.Захаров, К.И. Росси 85 KB
  : от классицизма к ампиру. В Российской империи стиль ампир появился при Александре I. Для возведения Исакиевского собора Александр I пригласил начинающего французского архитектора Анри Луи Огюста Рикар де Монферрана впоследствии ставшего одним из основоположников русского ампира. Ампир от фр.
34489. Скульптура первой половины 19в.Скульпторы И.П. Мартос, Ф.Ф. Щедрин 26.5 KB
  Мартос Ф. Мартос создатель памятника Минину и Пожарскому а также Ф. Иван Петрович Мартос выдающийся русский скульптормонументалист. Портрет как самостоятельный жанр не занимает в творчестве Мартоса значительного места.
34490. Русское искусство н.19в.: Романтизм в творчестве живописца О.А. Кипренского 35.5 KB
  В изобразительном искусстве начала столетия сформировалось и новое направление вошедшее в историю под названием романтизма явление европейской культуры в XVIII XIX веках представляющее собой реакцию на Просвещение и стимулированный им научнотехнический прогресс. В начале XIX века романтизм стал обозначением нового направления противоположного классицизму и Просвещению. Героические походы Суворова на рубеже XVIII XIX столетий войны с Наполеоном и наконец народноосвободительная Отечественная война 1812 года а вслед за ней дворянское...
34491. Русское искусство н.19в.: Тенденции реализма в романтическом творчестве В.А.Тропинина. Пейзаж С.Ф. Щедрина 34.5 KB
  Тропинин. С этой же целью Тропинин пытался не показывать явную социальную принадлежность людей. âПортрет Арсения Тропининаâ подкупает искренностью и чистотой эмоций написан он легко и обобщенно. âКружевницаâ одно из самых популярных произведений Тропинина.
34492. Русское искусство н.19в.: А.Г. Веницианов – основоположник русской жанровой живописи 28 KB
  Чтобы верно понять значение творческого наследие Венецианова необходимо вспомнить общее состояние русской художественной культуры первой четверти XIX века. Венецианов.Ранние портретные работы Венецианова несмотря на тонкую одухотворенность казались современникам слишком скромными лишенными артистического блеска недостаточно проникновенными. В самом деле Венецианов не был прирожденным портретистом.