Как вызвать функцию из статической библиотеки с
Перейти к содержимому

Как вызвать функцию из статической библиотеки с

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

В этом пошаговом руководстве описывается создание статической библиотеки (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#.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *