4882

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

Лекция

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

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

Русский

2012-11-28

200.5 KB

35 чел.

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

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

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


 

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

28579. Требования к качеству ключевой информации и источники ключей 16.09 KB
  Не все ключи и таблицы замен обеспечивают максимальную стойкость шифра. Исчерпывающий ответ на вопрос о критериях качества ключей и таблиц замен ГОСТа если и можно получить то только у разработчиков алгоритма. Очевидно что нулевой ключ и тривиальная таблица замен по которой любое значение заменяется но него самого являются слабыми. Таблица замен является долговременным ключевым элементом т.
28580. Криптоанализ 12.62 KB
  В частности полнораундовый алгоритм ГОСТ 2814789 может быть вскрыт с помощью дифференциального криптоанализа на связанных ключах но только в случае использования слабых таблиц замен. 24раундовый вариант алгоритма в котором отсутствуют первые 8 раундов вскрывается аналогичным образом при любых таблицах замен однако сильные таблицы замен делают такую атаку абсолютно непрактичной. [править] Критика ГОСТа Основные проблемы ГОСТа связаны с неполнотой стандарта в части генерации ключей и таблиц замен. Тривиально доказывается что у ГОСТа...
28581. Проблемы генерации и распространения ключей. Конфигурации сетей связи 14.3 KB
  Можно выделить несколько этапов жизни ключевой информации: n Изготовление n Доставка потребителям n Утилизация n Уничтожение Мы рассматривали в основном утилизацию ключей то есть их использование в алгоритмах шифрования. Рассмотрим теперь процедуры изготовления и доставки ключей абонентам они называются генерацией и распространением соответственно. Правила генерации распространения утилизации и уничтожения ключей называются ключевой системой.
28582. Требования к системе с симметричными ключами – при генерации и распространении ключей 16 KB
  Правила генерации распространения утилизации и уничтожения ключей называются ключевой системой. Процедура генерации ключей должна производить только ключи специфицированные для данного алгоритма 2. Процедура генерации должна быть максимально приближена к модели случайного равновероятного выбора ключа из множества всех ключей специфицированных для данного алгоритма.
28583. Генерация случайных чисел., использование типовых узлов в качестве ДСПЧ 33.58 KB
  Хорошие датчики имеют весьма качественные характеристики и могут использоваться непосредственно для получения ключей однако они сложны и имеют высокую стоимость и поэтому не находят массового применения. Их стоимость существенно ниже они более надежны но использовать выход с них в качестве ключа в чистом виде не рекомендуется частично о том почему их можно использовать мы поговорим в когда будем говорить о системах с открытым ключом. В качестве ДСПЧ можно использовать один из следующих узлов. Использовать его можно несколькими...
28584. Генерация случайных чисел с использованием аппаратных ДСЧ 12.16 KB
  Практически интересным является вопрос о создании аппаратных ДСЧ генерирующих 01 последовательность как можно более близкую к последовательности получаемой по равновероятной биномиальной схеме. Проблема с использованием аппаратных ДСЧ заключается в необходимости наличия дополнительного изделия а это зачастую может быть трудно реализуемо. В тех случаях когда криптографические преобразования реализуются аппаратно эта проблема разрешима сегодня аппаратные ДСЧ реализованы в изделиях серии ГРИМ и КРИПТОН при этом правда ДСЧ последнего не...
28585. Классификация имущества предприятия по видам 34 KB
  К ним относятся основные средства капитальные и другие финансовые вложения нематериальные активы. Основные средства – это часть средств производства целиком и полностью участвующие в хозяйственной деятельности предприятий в течение длительного времени не меняющие своей натуральной формы и переносящие свою стоимость на продукт постепенно по мере износа. Практически к основным средствам относя средства со сроком полезного использования больше 12 месяцев. Оборотные средства активы – вложения финансовых ресурсов в объекты...
28586. Классификация системы внутреннего контроля 28 KB
  Также различают внутренний контроль в зависимости от применяемых методов и приемов контроля общие методы контроля индукция дедукция анализ синтез обобщение и другие самостоятельно разработанные методы замеры взвешивание пересчет инвентаризация наблюдение экспертиза сверка обратная калькуляция логическая и экономическая проверка тестирование анкетирование опрос и т. Одна из наиболее развитых форм внутреннего контроля внутренний аудит. Организация внутреннего контроля в форме внутреннего аудита присуща крупным и некоторым...
28587. Классификация имущества предприятия по источникам образования 30 KB
  Основной собственный источник хозяйственных средств предприятия – уставный капитал. Его первоначальная величина фиксируется в уставе предприятия без фиксирования в уставе документ фактически не имеет смысла. Направления и величина уставного капитала определяются собственником предприятия.