Лекция 21: Программы на языке С при использовании статически подключаемой библиотеки
Результат установки свойств следующей закладки Language показан на рис. 20.6.
Режим работы языка С в MS Visual Studio устанавливается на закладке Advanced. Результат установки показан на рис. 20.7.
Важным моментом, на который требуется обратить внимание, является версия используемой библиотеки времени выполнения (runtime library). Библиотека времени выполнения содержит функции стандартной библиотеки языка С, а также некоторое вспомогательное окружение, которое позволяет программе, написанной на языке С, выполняться в ОС Windows. Версия библиотеки времени выполнения для статически подключаемой библиотеки и для программы, ее использующей, должны совпадать. По этой причине статически подключаемую библиотеку часто компилируют в различных конфигурациях, каждая из которых использует свою версию библиотеки времени выполнения. В примере будем использовать многопоточную отладочную версию библиотеки времени выполнения, подключаемую к программе динамически (Multi-threaded Debug DLL) для отладочной сборки библиотеки, и многопоточную версию подключаемую динамически (Multi-threaded DLL), для конечной версии программы.
Тип используемой библиотеки времени выполнения выбирается на странице свойств [C/C++]|[Code?Generation]|[Runtime?Library]. Результат выбора типа библиотеки показан на рис. 20.8 (по умолчанию).
Подключение программных файлов осуществляется обычными средствами, рассмотренными, например, в "Программы на языке С, состоящие из нескольких файлов" .
Добавим к проекту статической библиотеки файлы stack.h/stack.c и queue.h/queue.c, реализующие в простейшем виде две важные структуры данных – стек и очередь. Подключение программных файлов осуществляется обычными средствами, рассмотренными, например, в предыдущей теме. Программный код каждого из подключенных файлов можно вывести (двойным щелчком мыши) в окно редактирования. Для примера выведем код файла stack.h.
Результат подключения файлов файлы stack.h/stack.c и queue.h/queue.c, показан на рис. 20.9.
После выполнения настроек компилятора необходимо выполнить настройки библиотекаря ( Librarian ) на вкладке после узла С/С++. Страница свойств библиотекаря содержит несколько настроек, из которых основной является имя создаваемой библиотеки. По умолчанию имя библиотеки совпадает с именем проекта. В этом случае следует оставить без изменения имеющиеся настройки закладки General узла Librarian. На закладке General в пункте Output File по умолчанию установлено $OutDir$(TargetName)$(TargetExt), что оставляем без изменения.
Открывающаяся страница свойств показана на рис. 20.10.
Настройка свойств Librarian завершается нажатием клавиш "Применить" и "OK".
После завершения настроек выполняется компиляция и сборка библиотеки. В процессе компиляции модули, входящие в состав библиотеки (файлы с расширением .c ), сначала обрабатываются препроцессором языка C, затем компилируются независимо друг от друга. В результате компиляции получается набор файлов с расширением .obj, содержащих скомпилированный код библиотечных функций. Затем полученный набор объектных файлов (с расширением .obj ) объединяется в библиотечный модуль (файл с расширением .lib ).
Процесс сборки проекта статической библиотеки запускается из пункта меню Build – Build containers. Результат выбора показан на рис. 20.11.
В процессе сборки библиотеки компилятор и библиотекарь (Librarian) выводят в окно сообщений (Output) среды Visual Studio диагностическую информацию. Эти сообщения содержат результаты компиляции каждого из модулей, подключенных к проекту статической библиотеки, возможные предупреждения компилятора и конечную статистику (например, количество ошибок и предупреждений) сборки статической библиотеки.
Сообщение о результатах компиляции рассматриваемого примера показаны на рис. 20.12.
В результате произведенной компиляции получаем папку с именем созданной библиотеки (containers), в которой в папке Debug располагается двоичный объектный библиотечный модуль – файл с расширением .lib. Для данного случая это файл containers.lib.