Создание и использование статической библиотеки (C++)

Обновлен: Ноябрь 2007

Следующим типом библиотеки, которую мы создадим, является статическая библиотека (LIB). Статические библиотеки являются хорошим способом повторного использования кода. Вместо того чтобы каждый раз реализовывать одни и те же подпрограммы в каждом создаваемом приложении, их можно создать единожды и затем вызывать из приложений для обеспечения соответствующей функциональности.

В этом пошаговом руководстве рассматриваются следующие действия:

  • создание проекта статической библиотеки;

  • добавление класса в статическую библиотеку;

  • создание приложения, ссылающегося на статическую библиотеку;

  • использование функциональных возможностей статической библиотеки в консольном приложении;

  • запуск приложения.

Обязательные компоненты

Этот раздел предполагает знание основ языка C++. Если вы приступаете к изучению C++, рекомендуем вам "Руководство по С++ для начинающих", написанное Гербом Шилдтом (Herb Schildt), которое доступно по ссылке https://go.microsoft.com/fwlink/?LinkId=115303.

Создание проекта статической библиотеки

  1. В меню Файл выберите пункт Создать и затем пункт Проект....

  2. В узле Visual C++ области Типы проектов выберите Win32.

  3. В области Шаблоны выберите Консольное приложение Win32.

  4. Выберите имя проекта, например MathFuncsLib, и введите его в поле Имя. Выберите имя решения, например StaticLibrary, и введите его в поле Имя решения.

  5. Для запуска мастера приложений Win32 нажмите кнопку ОК. На странице Общие сведения диалогового окна Мастер приложений Win32 нажмите кнопку Далее.

  6. На странице Параметры приложения диалогового окна Мастер приложений Win32 в поле Тип приложения выберите пункт Статическая библиотека.

  7. На странице Параметры приложения диалогового окна Мастер приложений Win32 в поле Дополнительные параметры снимите флажок Предкомпилированный заголовок.

  8. Чтобы создать проект, нажмите кнопку Готово.

Добавление класса в статическую библиотеку

  1. Чтобы создать файл заголовка для нового класса, в меню Проект выберите команду Добавить новый элемент.... Откроется диалоговое окно Добавление нового элемента. В узле Visual C++ области Категории выберите пункт Код. В области Шаблоны выберите пункт Заголовочный файл (.h). Выберите имя заголовочного файла, например MathFuncsLib.h, и нажмите Добавить. Отобразится пустой файл.

  2. Добавьте простой класс с именем MyMathFuncs, осуществляющий обычные арифметические операции, такие как сложение, вычитание, умножение и деление. Код должен выглядеть примерно следующим образом:

    // MathFuncsLib.h
    
    namespace MathFuncs
    {
        class MyMathFuncs
        {
        public:
            // Returns a + b
            static double Add(double a, double b);
    
            // Returns a - b
            static double Subtract(double a, double b);
    
            // Returns a * b
            static double Multiply(double a, double b);
    
            // Returns a / b
            // Throws DivideByZeroException if b is 0
            static double Divide(double a, double b);
        };
    }
    
  3. Чтобы создать исходный файл для нового класса, в меню Проект выберите команду Добавить новый элемент.... Откроется диалоговое окно Добавление нового элемента. В узле Visual C++ области Категории выберите пункт Код. В области Шаблоны выберите пункт Файл C++ (.cpp). Выберите имя исходного файла, например MathFuncsLib.cpp, и нажмите Добавить. Отобразится пустой файл.

  4. Реализуйте функциональность класса MyMathFuncs в исходном файле. Код должен выглядеть примерно следующим образом:

    // MathFuncsLib.cpp
    // compile with: /c /EHsc
    // post-build command: lib MathFuncsLib.obj
    
    #include "MathFuncsLib.h"
    
    #include <stdexcept>
    
    using namespace std;
    
    namespace MathFuncs
    {
        double MyMathFuncs::Add(double a, double b)
        {
            return a + b;
        }
    
        double MyMathFuncs::Subtract(double a, double b)
        {
            return a - b;
        }
    
        double MyMathFuncs::Multiply(double a, double b)
        {
            return a * b;
        }
    
        double MyMathFuncs::Divide(double a, double b)
        {
            if (b == 0)
            {
                throw new invalid_argument("b cannot be zero!");
            }
    
            return a / b;
        }
    }
    
  5. Чтобы построить статическую библиотеку проекта, в меню Проект выберите СвойстваMathFuncsLib. В левой области в поле Свойства конфигурации выберите Общие. В правой области в поле Тип конфигурации выберите Статическая библиотека (.lib). Нажмите кнопку ОК для сохранения изменений.

    ms235627.alert_note(ru-ru,VS.90).gifПримечание.

    При выполнении построения из командной строки оно производится в два этапа. Сперва необходимо скомпилировать код путем вызова Cl.exe с параметром компилятора /c (cl /c /EHsc MathFuncsLib.cpp). При этом будет создан объектный файл с именем MathFuncsLib.obj. Дополнительные сведения см. в разделе Параметр /c (компиляция без связывания). Далее необходимо связать код с помощью диспетчера библиотек Lib.exe (lib MathFuncsLib.obj). При этом будет создана статическая библиотека MathFuncsLib.lib. Дополнительные сведения о диспетчере библиотек см. в разделе Документация по LIB.

  6. Скомпилируйте статическую библиотеку, выбрав команду Построить решение в меню Построение. В результате будет создана статическая библиотека, которая может использоваться другими программами.

Создание приложения, ссылающегося на статическую библиотеку

  1. Чтобы создать приложение, которое будет ссылаться и использовать созданную ранее статическую библиотеку, в меню Файл выберите пункт Создать и затем пункт Проект....

  2. В узле Visual C++ области Типы проектов выберите Win32.

  3. В области Шаблоны выберите Консольное приложение Win32.

  4. Выберите имя проекта, например MyExecRefsLib, и введите его в поле Имя. В раскрывающемся списке рядом с полем Решение выберите пункт Добавить в решение. После этого новый проект будет добавлен в то же решение, что и статическая библиотека.

  5. Для запуска мастера приложений Win32 нажмите кнопку ОК. На странице Общие сведения диалогового окна Мастер приложений Win32 нажмите кнопку Далее.

  6. На странице Параметры приложения диалогового окна Мастер приложений Win32 в поле Тип приложения выберите пункт Консольное приложение.

  7. На странице Параметры приложения диалогового окна Мастер приложений Win32 в поле Дополнительные параметры снимите флажок Предкомпилированный заголовок.

  8. Чтобы создать проект, нажмите кнопку Готово.

Использование функциональных возможностей статической библиотеки в консольном приложении

  1. По завершении создания консольного приложения мастер создаст пустую программу. Имя исходного файла будет совпадать с именем, выбранным ранее для проекта. В этом примере он имеет имя MyExecRefsLib.cpp.

  2. Для использования математических процедур из статической библиотеки необходимо сослаться на эту библиотеку. Для этого в меню Проект выберите пункт Ссылки.... В диалоговом окне Окна свойств разверните узел Общие свойства и выберите пункт Ссылки. Затем нажмите кнопку Добавить новую ссылку.... Дополнительные сведения о диалоговом окне Ссылки... см. в разделе Среда и ссылки, общие свойства и диалоговое окно ''Страницы свойств: <Имя проекта>''.

  3. Появится диалоговое окно Добавить ссылку. В этом диалоговом окне отображается список всех библиотек, на которые можно ссылаться. На вкладке Проект перечисляются все проекты текущего решения и включенные в них библиотеки. На вкладке Проекты выберите MathFuncsLib. Затем нажмите кнопку ОК. Дополнительные сведения о диалоговом окне Добавление ссылки см. в разделе Диалоговое окно "Добавление ссылки".

  4. Для создания ссылки на заголовочные файлы статической библиотеки необходимо изменить путь к каталогам включения. Для этого в диалоговом окне Окна свойств последовательно разверните узлы Свойства конфигурации, C/C++, а затем выберите Общие. Рядом с полем Дополнительные каталоги включения введите путь к месту размещения заголовочного файла MathFuncsLib.h.

  5. Теперь класс MyMathFuncs можно использовать в приложении. Замените код в файле MyExecRefsLib.cpp следующим кодом:

    // MyExecRefsLib.cpp
    // compile with: /EHsc /link MathFuncsLib.lib
    
    #include <iostream>
    
    #include "MathFuncsLib.h"
    
    using namespace std;
    
    int main()
    {
        double a = 7.4;
        int b = 99;
    
        cout << "a + b = " <<
            MathFuncs::MyMathFuncs::Add(a, b) << endl;
        cout << "a - b = " <<
            MathFuncs::MyMathFuncs::Subtract(a, b) << endl;
        cout << "a * b = " <<
            MathFuncs::MyMathFuncs::Multiply(a, b) << endl;
        cout << "a / b = " <<
            MathFuncs::MyMathFuncs::Divide(a, b) << endl;
    
        return 0;
    }
    
  6. Постройте исполняемый файл, выбрав команду Построить решение в меню Построение.

Запуск приложения

  1. Убедитесь, что проект MyExecRefsLib выбран в качестве проекта по умолчанию. В Обозревателе решений выберите проект MyExecRefsLib и затем в меню Проект выберите команду Назначить запускаемым проектом.

  2. Чтобы запустить проект, в меню Отладка выберите команду Запуск без отладки. Результат выполнения должен выглядеть примерно следующим образом:

    a + b = 106.4
    a - b = -91.6
    a * b = 732.6
    a / b = 0.0747475
    

Следующие действия

Назад:Создание и использование библиотеки DLL (C++) | Далее:Создание и использование управляемой сборки (C++)

См. также

Задачи

Интерактивный учебник по Visual C++

Развертывание программы (C++)

Другие ресурсы

Общая методика программирования

Развертывание (C++)