25 января 2010 в 17:37
Библиотеки статичного связывания
Сегодня мы познакомимся с библиотеками. А точнее, с библиотеками статичного связывания (static linked libraries).
Библиотеки статичного связывания предназначены для упрощения повторного использования кода. Сразу определимся, что же можно поместить в библиотеку. На данный момент у нас готово два класса, которые мы будем многократно использовать в будущих проектах. Это vector3 и DLinkedList. Сегодня мы создадим библиотеку: math.
Впоследствии, библиотеки, которые мы будем создавать на протяжении довольно длительного времени, составят основу игрового движка. В будущем к библиотекам math добавятся и другие: библиотеки для обработки физики, графики и конечно же библиотека для работы с сетью.
Создайте на жёстком диске папку libraries (где вам удобней). В ней создайте две папки: include и lib. В папке include будут храниться необходимые заголовочные файлы, а в lib - готовые библиотеки.
Ну чтож, приступим к созданию библиотек. Все библиотеки будут хранится в одном решении и у каждой будет свой проект. Создаём библиотеку math.
Создаём в Visual studio новый проект:
В окне Application settings (Настройки приложений) укажите, что создаётся статичная библиотека и уберите флажок (если он установлен) precompiled header:
Добавьте к проекту два файла: vector3.h и vector3.cpp
В файле vector3.h оставьте объявление класса и всех методов. В файл vector3.cpp поместите определение методов. Вот содержимое файлов: vector3.h и vector3.cpp
Вот в общем-то и всё. Компилируем библиотеку, но сначала нужно указать, чтобы компилировалась релизная версия. До сих пор для всех наших проектов мы делали только отладочные версии.
Откройте папку, где у вас лежит решение libraries. Из папки libraries/Release скопируйте файл math.lib (это и есть библиотечный файл) в lib, а из папки libraries/math скопируйте файл vector3.h в include. Напоминаю, что include и lib мы создали ранее.
Давайте проверим, что у нас получилось. Закройте решение libraries. Создайте какой-нибудь проект (можете использовать старый, где вы, я надеюсь, тестировали трёхмерные векторы) и добавьте к нему файл. Так как я хороший парень, то дам вам исходник программы, хотя вам должно быть стыдно за свою лень! Исходник тестовой программы. В программе используется несколько операций над векторами: присваивание, сравнение, нормирование, нахождение величины вектора. Скопируйте этот код в окно редактора.
Прежде всего, IDE нужно указать путь, где она сможет найти пользовательские (наши) бибилотеки. Открываем пункт меню Tools->Options (Сервис->Параметры). Переходим в узел VC++ Directories и указываем, где хранятся заголовочные и библиотечные файлы:
Закрываем это окно и открываем свойства проекта. Напоминаю, что сделать это можно, щёлкнув правой кнопкой на имени проекта в обозревателе решений и выбрав пункт Properties (Свойства). Не буду дальше описывать эти бесконечные пункты меню, всё ясно показано на следующей картинке:
Почти всё. Теперь нужно добавить в исходный код только одну строчку:
#include <vector3.h>
Обратите внимание, что используются угловые скобки, как при добавлений стандартных заголовочных файлов.
Контроль версий
К сожалению, так как мы ещё не разбирали программы управления версиями приложений, и классы ещё сырые (у нас ещё не хватает знаний, чтобы написать их правильно), то нам придётся самим управлять версиями библиотек.
Мы будем использовать довольно простой способ: в конец файлов будем добавлять окончание вида: _vX.Y где X, Y - номер версии. Если вам понадобится новая версия библиотек/заголовочных файлов/исходников, заходите в раздел Листинги и скачиваете нужную версию.
Если в коде встретится вот такое включение:
#include <vector3_v0.1.h>
То к проекту необходимо добавить библиотеку math_v0.1.lib
В большинстве случаев вы будете работать непосредственно с библиотеками. Но иногда вам понадобятся и исходники, например, если в новую версию библиотечного класса были добавлены новые возможности и вы хотите рассмотреть их более подробно.
Шаблонные классы
Шаблонные классы нельзя поместить в статичные библиотеки. Дело в том, что объявление класса и определение методов класса должны находиться в одном файле.
В стандарте C++ есть возможность объявления шаблонных классов и определения их методов в разных файлов. В стандарте для этого исопльзуется ключевое слово export. Но на данный момент компилятор встроенный в Visual C++ 2008 не поддерживает export.
Поэтому, для шаблонных классов мы будем использовать заголовочные файлы. Т.е. если в программе вы встретите код:
#include <Graph_v0.7.h>
Здесь не нужно добавлять к проекту библиотечный файл, вам необходимо только удостовериться, что файл Graph_v0.7.h расположен в папке libraries\include. Если его там не окажется, то вам необходимо будет скачать его из раздела Листинги.
На сегодня всё.
13 июня 2013 в 10:29
На Visual Studio 2010 года отсутствует такая возможность VC++ Directories, в справке ничего не дается. Напишите пожалуста, как добавить на VS 2010 года?
13 июня 2013 в 14:26
Настройки VC++ Directories переехали из глобальных настроек Visual Studio в настройки проекта.
авторизуйтесь
или войдите через