Поделиться через


Пошаговое руководство. Создание и использование статической библиотеки (C++)

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

В пошаговом руководстве показано, как выполнять следующие задачи:

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

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

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

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

  • Запустите приложение.

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

Этот раздел предполагает знание основ языка C++. Пользователям, только приступающим к изучению C++, рекомендуется ознакомиться со следующим руководством в библиотеке MSDN: Tier One: C++ Beginner's Guide.

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

  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 следующим кодом.

    // 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 следующим кодом.

    // 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. Чтобы встроить проект в статистическую библиотеку, выберите в меню Проект пункт Свойства. В левой области в поле Свойства конфигурации выберите Общие. В правой области в поле Тип конфигурации выберите Статическая библиотека (.lib). Нажмите кнопку ОК для сохранения изменений.

    Примечание

    При выполнении построения из командной строки оно производится в два этапа.Сперва необходимо скомпилировать код путем вызова 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. Для использования математических процедур из статической библиотеки необходимо сослаться на эту библиотеку. Для этого в меню Проект выберите пункт Ссылки. В диалоговом окне Страницы свойств библиотеки MyExecRefsLib разверните узел Общие свойства и выберите команду Добавить новую ссылку. Дополнительные сведения о диалоговом окне Ссылки см. в разделе Среда и ссылки, общие свойства и диалоговое окно "Страницы свойств: <Имя проекта>".

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

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

    Чтобы найти путь к каталогу, в раскрывающемся списке значений свойств щелкните Изменить. В текстовом поле диалогового окна Дополнительные каталоги включаемых файлов выберите пустую строку и нажмите кнопку с многоточием () в конце строки. В диалоговом окне Выбор каталога выберите каталог MathFuncsLib и нажмите кнопку Выбор папки, чтобы сохранить выбранные значения и закрыть диалоговое окно. В диалоговом окне Дополнительные каталоги включаемых файлов нажмите кнопку ОК.

  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++)

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

Методологии программирования на Visual C++

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

Журнал изменений

Дата

Журнал

Причина

Сентябрь 2010

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

Обратная связь от клиента.