Пошаговое руководство. Создание и использование статической библиотеки
В этом пошаговом руководстве описывается создание статической библиотеки (LIB-файла) для использования с приложениями C++. Статические библиотеки являются хорошим способом повторного использования кода. Вместо того чтобы каждый раз реализовывать одни и те же подпрограммы для обеспечения той или иной функциональности в каждом создаваемом приложении, их можно создать единожды и затем вызывать из приложений. Код, связанный из статической библиотеки, станет частью приложения — . для использования кода не нужно устанавливать другой файл.
В этом пошаговом руководстве рассматриваются следующие задачи:
Предварительные требования
Для работы необходимо владеть основами языка C++.
Создание проекта статической библиотеки
Инструкции по созданию проекта зависят от используемой версии Visual Studio. Чтобы ознакомиться с документацией по предпочтительной версии Visual Studio, используйте селектор Версия. Он находится в верхней части оглавления на этой странице.
Создание проекта статической библиотеки в Visual Studio
в строке меню выберите файл создать Project , чтобы открыть диалоговое окно создание нового Project .
в верхней части диалогового окна задайте для параметра Language значение C++, задайте для параметра Platform значение Windowsи задайте для параметра Project тип значение Library.
В отфильтрованном списке типов проектов выберите пункт Мастер классических приложений Windows, а затем нажмите кнопку Далее.
На странице Настроить новый проект введите MathLibrary в поле Имя проекта. В поле Имя решения введите StaticMath. Нажмите кнопку Создать, чтобы открыть диалоговое окно Проект классического приложения Windows.
В диалоговом окне Проект классического приложения Windows в разделе Тип приложения выберите Статическая библиотека (.lib) .
В разделе Дополнительные параметры снимите флажок Предварительно откомпилированный заголовок, если он установлен. Установите флажок Пустой проект.
Нажмите кнопку ОК, чтобы создать проект.
Создание проекта статической библиотеки в Visual Studio 2017
В строке меню выберите Файл Создать Проект.
в диалоговом окне создание Project выберите установленный Visual C++ Windows рабочий стол. На центральной панели выберите Мастер классических приложений Windows.
Укажите имя проекта — , например —— в поле — . Укажите имя решения — , например —— в поле — . Нажмите кнопку ОК .
В диалоговом окне Проект классического приложения Windows в разделе Тип приложения выберите Статическая библиотека (.lib) .
В разделе Дополнительные параметры снимите флажок Предварительно откомпилированный заголовок, если он установлен. Установите флажок Пустой проект.
Нажмите кнопку ОК, чтобы создать проект.
Создание проекта статической библиотеки в Visual Studio 2015
В строке меню выберите Файл Создать Проект.
в диалоговом окне создание Project выберите установленные шаблоны Visual C++ Win32. В центральной области выберите Консольное приложение Win32.
Укажите имя проекта — , например —— в поле — . Укажите имя решения — , например —— в поле — . Нажмите кнопку ОК .
В мастере приложений Win32 нажмите кнопку Далее.
На странице Параметры приложения в разделе Тип приложения выберите Статическая библиотека. В разделе Дополнительные параметры снимите флажок Предварительно откомпилированный заголовок. Чтобы создать проект, нажмите кнопку Готово.
Добавление класса в статическую библиотеку
Добавление класса в статическую библиотеку
Чтобы создать файл заголовка для нового класса, щелкните правой кнопкой мыши, чтобы открыть контекстное меню проекта маслибрари в Обозреватель решений, а затем выберите команду добавить новый элемент.
В диалоговом окне Добавление нового элемента выберите Visual C++ код. В центральной области выберите Заголовочный файл (.h) . Укажите имя файла заголовка — , например —, — а затем нажмите кнопку — . Отобразится почти пустой файл заголовка.
Добавьте объявление класса с именем Arithmetic для выполнения обычных арифметических операций, таких как сложение, вычитание, умножение и деление. Код должен выглядеть примерно так:
Чтобы создать исходный файл для нового класса, откройте контекстное меню проекта маслибрари в Обозреватель решений, а затем выберите добавить новый элемент.
В диалоговом окне Добавление нового элемента в центральной области выберите Файл C++ (.cpp) . Укажите имя исходного файла — , например —, — а затем нажмите кнопку — . Отобразится пустой исходный файл.
Используйте этот исходный файл для реализации функций класса Arithmetic . Код должен выглядеть примерно так:
Чтобы построить статическую библиотеку, выберите Сборкапостроить решение в строке меню. В результате будет создана статическая библиотека MathLibrary.lib, которая может использоваться другими программами.
При выполнении сборки из командной строки Visual Studio программа собирается в два этапа. Сначала выполните команду, cl /c /EHsc MathLibrary.cpp чтобы скомпилировать код и создать объектный файл с именем cl /c /EHsc MathLibrary.cpp . ( cl Команда вызывает компилятор, Cl.exe, а /c параметр указывает Compile без компоновки. Дополнительные сведения см. в разделе /c (компиляция без компоновки). Затем выполните команду, lib MathLibrary.obj чтобы связать код и создать статическую библиотеку lib MathLibrary.obj . (Команда lib вызывает диспетчер библиотек, Lib.exe. Дополнительные сведения см. в разделе LIB Reference.)
Создание консольного приложения C++, ссылающегося на статическую библиотеку
Создание консольного приложения C++, ссылающегося на статическую библиотеку, в Visual Studio
В обозревателе решений щелкните правой кнопкой мыши узел верхнего уровня Решение StaticMath, чтобы открыть контекстное меню. выберите добавить новый Project , чтобы открыть диалоговое окно добавление нового Project .
В верхней части диалогового окна задайте для фильтра Тип проекта значение Консоль.
В отфильтрованном списке типов проектов щелкните Консольное приложение, а затем нажмите кнопку Далее. На следующей странице в поле Имя введите имя проекта MathClient.
Нажмите кнопку Создать, чтобы создать клиентский проект.
После создания консольного приложения будет создана пустая программа. Имя исходного файла будет совпадать с ранее выбранным именем. В этом примере он имеет имя MathClient.cpp .
Создание консольного приложения C++, ссылающегося на статическую библиотеку, в Visual Studio 2017
В обозревателе решений щелкните правой кнопкой мыши узел верхнего уровня Решение StaticMath, чтобы открыть контекстное меню. нажмите кнопку добавить новый Project , чтобы открыть диалоговое окно добавление нового Project .
в диалоговом окне добавление нового Project выберите установленный Visual C++ Windows рабочий стол. На центральной панели выберите Мастер классических приложений Windows.
Укажите имя проекта — , например —— в поле — . Нажмите кнопку ОК .
В диалоговом окне Проект классического приложения Windows в разделе Тип приложения выберите Консольное приложение (EXE) .
В разделе Дополнительные параметры снимите флажок Предварительно откомпилированный заголовок, если он установлен.
Нажмите кнопку ОК, чтобы создать проект.
После создания консольного приложения будет создана пустая программа. Имя исходного файла будет совпадать с ранее выбранным именем. В этом примере он имеет имя MathClient.cpp .
Создание консольного приложения C++, ссылающегося на статическую библиотеку, в Visual Studio 2015
В обозревателе решений щелкните правой кнопкой мыши узел верхнего уровня Решение StaticMath, чтобы открыть контекстное меню. нажмите кнопку добавить новый Project , чтобы открыть диалоговое окно добавление нового Project .
в диалоговом окне добавление нового Project выберите установлено Visual C++ Win32. В центральной области выберите Консольное приложение Win32.
Укажите имя проекта — , например —— в поле — . Нажмите кнопку ОК .
В диалоговом окне Мастер приложений Win32 нажмите кнопку Далее.
На странице Параметры приложения выберите в поле Тип приложения пункт Консольное приложение. В разделе Дополнительные параметры снимите флажок Предварительно откомпилированный заголовок, а затем установите флажок Пустой проект. Чтобы создать проект, нажмите кнопку Готово.
Чтобы добавить исходный файл в пустой проект, щелкните правой кнопкой мыши, чтобы открыть контекстное меню проекта масклиент в Обозреватель решений, а затем выберите команду добавить новый элемент.
В диалоговом окне Добавление нового элемента выберите Visual C++ код. В центральной области выберите Файл C++ (.cpp) . Укажите имя исходного файла — , например —, — а затем нажмите кнопку — . Отобразится пустой исходный файл.
Использование функциональности из статической библиотеки в приложении
Использование функциональности из статической библиотеки в приложении
Для использования математических процедур из статической библиотеки необходимо сослаться на эту библиотеку. Откройте контекстное меню проекта масклиент в Обозреватель решений, а затем выберите добавить ссылку.
В диалоговом окне Добавление ссылки перечислены библиотеки, на которые можно создать ссылку. На вкладке Проекты перечислены проекты текущего решения и все библиотеки, на которые они ссылаются. На вкладке Проекты установите флажок MathLibrary, а затем нажмите кнопку ОК.
Для создания ссылки на файл заголовка MathLibrary.h необходимо изменить путь к каталогам включаемых файлов. В обозревателе решений щелкните правой кнопкой мыши проект MathClient, чтобы открыть контекстное меню. Выберите пункт Свойства, чтобы открыть диалоговое окно Страницы свойств MathClient.
В диалоговом окне Страницы свойств MathClient в раскрывающемся списке Конфигурация выберите пункт Все конфигурации. В раскрывающемся списке Платформа выберите пункт Все платформы.
Выберите страницу свойств Свойства конфигурации C/C++ Общие . В свойстве Дополнительные каталоги включаемых файлов укажите путь к каталогу MathLibrary или найдите этот каталог.
Чтобы найти путь к каталогу, выполните указанные ниже действия.
Откройте раскрывающийся список значений свойства Дополнительные каталоги включаемых файлов, а затем выберите Изменить.
В диалоговом окне Дополнительные каталоги включаемых файлов дважды щелкните в верхней части текстового поля. Нажмите кнопку с многоточием ( . ) в конце строки.
В диалоговом окне Выбор каталога перейдите на уровень вверх и выберите каталог MathLibrary. Затем нажмите кнопку Выбрать папку, чтобы сохранить выбор.
В диалоговом окне Дополнительные каталоги включаемых файлов нажмите кнопку ОК.
В диалоговом окне Страницы свойств нажмите кнопку OK, чтобы сохранить изменения в проекте.
Теперь в этом приложении можно использовать класс Arithmetic , включив в код заголовок #include "MathLibrary.h" . Замените содержимое MathClient.cpp на следующий код:
Чтобы создать исполняемый файл, выберите Сборкапостроить решение в строке меню.
Запуск приложения
Запуск приложения
Убедитесь в том, что проект MathClient выбран в качестве проекта по умолчанию. Чтобы выбрать его, в обозревателе решений откройте контекстное меню проекта MathClient и выберите команду Назначить запускаемым проектом.
Чтобы запустить проект, в строке меню выберите Отладка Запуск без отладки. Выходные данные должны выглядеть примерно так:
Как использовать статическую библиотеку?
Есть проект на C, и имеется статическая библиотека (.lib), как теперь подключить эту библиотеку к объектному коду моего проекта (для создания объектного кода моего проекта я использую следующую конструкцию: gcc -c somefile.c). Я пробовал использовать #pragma comment(lib, «libname.lib») но такой способ не прошёл, при компиляции я получаю сообщения вроде: undefined reference to ‘funcname’. Ещё я пробовал сначала создать somefile.o, а потом при помощи линковщика (ld) связать их так: ld somefile.o libname.lib. Вопрос, как правильно подключать статические библиотеки к объектному коду, и как эти библиотеки лучше всего компилировать (я использую cl.exe, потому что с gcc у меня не получается).
Примечания: gcc v8.2.0 ОС Win 8 x86 (хотя компилятор и ОС скорее всего не имеют значения).
Вызов функций из статической библиотеки C
У меня есть собственная библиотека C++ (статическая цель, т.е. .lib). Я хочу использовать некоторые функции из этого файла в своих проектах C#. Для dll я мог бы вызвать их. Как мне это сделать для статических библиотек?
Я прочитал этот вопрос , и в ответе Дэвида говорится, что вы можете вызывать только для dll, а не для libs.

Статическая библиотека используется путем связывания ее с более крупным модулем. В Windows это означает DLL или исполняемый файл.
Они не автономны и имеют смысл только тогда, когда вы связываете их в более крупный модуль. Таким образом, это будет означать, что для использования pinvoke вам необходимо создать DLL, которая включает библиотеку, и подключить эту DLL.
В качестве альтернативы pinvoke вы можете создать сборку C++/CLI в смешанном режиме. Свяжите статическую библиотеку с этой сборкой C++/CLI и предоставьте функциональность через управляемый класс C++. Затем этот управляемый класс может использоваться вашим кодом C#.