Как подключить статическую библиотеку c visual studio
Добавить необходимые заголовочные файлы в папку Header Files. Например, добавим файл header.h, в котором разместим объявления функций.
Добавить необходимые файлы исходных кодов в папку Source Files. Например, добавим файл source.cpp, в котором разместим реализации.
Содержимое заголовочного файла:
extern "C" __declspec(dllexport) int TestFunction(int w, int h);
Содержимое файла исходных кодов:
int TestFunction(int w, int h)
Создание консольного приложения
Выполнить команду контекстного меню File->New Project
Выбрать тип проекта Visual C++ -> Win32 -> Win32 Console Application
Ввести имя проекта
Нажать на кнопку Create
Нажать на кнопку Next
Выбрать Application Type равным Console Application
Установить Additional Options равными Empty Project
Нажать на кнопку Finish
Статическое подключение библиотеки в консольное приложение
Добавить в проект в папку Resources Files скомпилированный lib-файл библиотеки.
В файле исходного кода, где будет вызываться функция библиотеки необходимо поместить прототип импортируемой функции.
В продолжении примера, это можно сделать следующим образом:
extern "C" __declspec(dllimport) int TestFunction(int w, int h);
int w = 10, h = 10;
int multi = TestFunction(w, h);
Динамическое подключение библиотеки в консольное приложение
Динамическое подключение предполагает, что библиотека подключается в приложение в момент его исполнения. Для этого необходимо использовать функцию библиотеки windows.h - LoadLibrary. Например, это можно реализовать следующим образом:
// тип указателя на функцию, имеющей прототип, который совпадает с прототипом импортируемой из библиотеки функции
typedef int (*TESTFUNCTION)(int, int);
int w = 10, h = 10, multi;
DWORD err;
HINSTANCE hDll = LoadLibrary("dll.dll"); // dll.dll - название подключаемой библиотеки
printf("Library was loaded\n");
// получение указателя на функцию библиотеки
TESTFUNCTION lpTestFunction = (TESTFUNCTION)GetProcAddress(hDll, "TestFunction");
if (lpTestFunction != NULL)
multi = (*lpTestFunction) (w, h);
// освобождение дескриптора
FreeLibrary(hDll);
Подключение библиотеки в Windows Forms приложение
Добавить ссылку на проект библиотеки (References).
Изменить в свойствах оконного приложения опцию компиляции на /clr.
Отключить использование Precompiled Headers.
Прописать пути до заголовочных файлов библиотеки в свойствах проекта. Указать относительные пути, чтобы не было проблем при переносе проекта.
В исходных кодах приложения подключить необходимые заголовочные файлы.
Примечания:
Такая схема экспортирования функций библиотеки удобна в случае C-библиотеки. При наличии классов, содержащих виртуальные методы, возникает проблема линковки, если объявление и реализация разнесены в разных файлах. Решение:
Писать реализацию прямо при объявлении, что наименее предпочтительно.
Создавать библиотеку с поддержкой clr (для этого создаем библиотеку по схеме, описанной выше, и выставляем в свойствах проекта Configuration Properties -> General -> Common Language Runtime Support опцию Common Language Runtime Support(/clr)) (пример библиотеки clrDll в архиве dlltest+WinForms+CRL DLL.7z). При подключении библиотеки в проект необходимо добавить ссылку на проект библиотеки (правой кнопкой мыши по проекту, Add References. Add New Reeference и выбираем проект библиотеки) (пример консольного приложение app4 в dlltest+WinForms+CRL DLL.7z).
В этом пошаговом руководстве описывается создание статической библиотеки (LIB-файла) для использования с приложениями C++. Статические библиотеки являются хорошим способом повторного использования кода. Вместо того чтобы каждый раз реализовывать одни и те же подпрограммы для обеспечения той или иной функциональности в каждом создаваемом приложении, их можно создать единожды и затем вызывать из приложений. Код, подключенный из статической библиотеки, становится частью вашего приложения — для использования кода не нужно устанавливать еще какой-либо файл.
В этом пошаговом руководстве рассматриваются следующие задачи:
Предварительные требования
Для работы необходимо владеть основами языка C++.
Создание проекта статической библиотеки
Инструкции по созданию проекта зависят от используемой версии Visual Studio. Чтобы ознакомиться с документацией по предпочтительной версии Visual Studio, используйте селектор Версия. Он находится в верхней части оглавления на этой странице.
Создание проекта статической библиотеки в Visual Studio
В строке меню выберите Файл > Создать > Проект, чтобы открыть диалоговое окно Создание проекта.
В верхней части диалогового окна для параметра Язык установите значение C++ , для параметра Платформа — значение Windows, а для параметра Тип проекта — значение Библиотека.
В отфильтрованном списке типов проектов выберите пункт Мастер классических приложений Windows, а затем нажмите кнопку Далее.
В диалоговом окне Проект классического приложения Windows в разделе Тип приложения выберите Статическая библиотека (.lib) .
В разделе Дополнительные параметры снимите флажок Предварительно откомпилированный заголовок, если он установлен. Установите флажок Пустой проект.
Создание проекта статической библиотеки в Visual Studio 2017
В строке меню щелкните Файл > Создать > Проект.
В диалоговом окне Новый проект выберите Установленные > Visual C++ > Классическое приложение для Windows. На центральной панели выберите Мастер классических приложений Windows.
В диалоговом окне Проект классического приложения Windows в разделе Тип приложения выберите Статическая библиотека (.lib) .
В разделе Дополнительные параметры снимите флажок Предварительно откомпилированный заголовок, если он установлен. Установите флажок Пустой проект.
Создание проекта статической библиотеки в Visual Studio 2015
В строке меню щелкните Файл > Создать > Проект.
В диалоговом окне Новый проект выберите Установленные > Шаблоны > Visual C++ > Win32. В центральной области выберите Консольное приложение Win32.
В мастере приложений Win32 нажмите кнопку Далее.
На странице Параметры приложения в разделе Тип приложения выберите Статическая библиотека. В разделе Дополнительные параметры снимите флажок Предварительно откомпилированный заголовок. Чтобы создать проект, нажмите кнопку Готово.
Добавление класса в статическую библиотеку
Добавление класса в статическую библиотеку
Чтобы создать файл заголовка для нового класса откройте контекстное меню проекта MathLibrary в обозревателе решений, а затем выберите Добавить > Новый элемент.
В диалоговом окне Добавление нового элемента выберите пункт Visual C++ > Код. В центральной области выберите Заголовочный файл (.h) . Укажите имя для файла заголовка, например MathLibrary.h, и нажмите кнопку Добавить. Отобразится почти пустой файл заголовка.
Добавьте объявление класса с именем Arithmetic для выполнения обычных арифметических операций, таких как сложение, вычитание, умножение и деление. Код должен выглядеть примерно так:
Чтобы создать исходный файл для нового класса, откройте контекстное меню проекта MathLibrary в обозревателе решений, а затем выберите Добавить > Новый элемент.
В диалоговом окне Добавление нового элемента в центральной области выберите Файл C++ (.cpp) . Укажите имя исходного файла, например MathLibrary.cpp, и нажмите кнопку Добавить. Отобразится пустой исходный файл.
Используйте этот исходный файл для реализации функций класса Arithmetic . Код должен выглядеть примерно так:
Чтобы выполнить сборку статической библиотеки, выберите в строке меню команду Сборка > Собрать решение. В результате будет создана статическая библиотека MathLibrary.lib, которая может использоваться другими программами.
При выполнении сборки из командной строки Visual Studio программа собирается в два этапа. Сначала запустите cl /c /EHsc MathLibrary.cpp , чтобы скомпилировать код и создать объектный файл с именем MathLibrary.obj. (Команда cl вызывает компилятор Cl.exe, а параметр /c дает указание компилировать без компоновки. Дополнительные сведения см. в разделе Параметр /c (компиляция без связывания). Во-вторых, запустите файл lib MathLibrary.obj , чтобы связать код и создать статическую библиотеку MathLibrary.lib. (Команда lib вызывает диспетчер библиотек, Lib.exe. Дополнительные сведения см. в разделе LIB Reference.)
Создание консольного приложения C++, ссылающегося на статическую библиотеку
Создание консольного приложения C++, ссылающегося на статическую библиотеку, в Visual Studio
В обозревателе решений щелкните правой кнопкой мыши узел верхнего уровня Решение StaticMath, чтобы открыть контекстное меню. Выберите пункты Добавить > Новый проект, чтобы открыть диалоговое окно Добавить новый проект.
В верхней части диалогового окна задайте для фильтра Тип проекта значение Консоль.
В отфильтрованном списке типов проектов щелкните Консольное приложение, а затем нажмите кнопку Далее. На следующей странице в поле Имя введите имя проекта MathClient.
После создания консольного приложения будет создана пустая программа. Имя исходного файла будет совпадать с ранее выбранным именем. В этом примере он имеет имя MathClient.cpp .
Создание консольного приложения C++, ссылающегося на статическую библиотеку, в Visual Studio 2017
В обозревателе решений щелкните правой кнопкой мыши узел верхнего уровня Решение StaticMath, чтобы открыть контекстное меню. Выберите пункты Добавить > Новый проект, чтобы открыть диалоговое окно Добавить новый проект.
В диалоговом окне Добавление нового проекта выберите Установленные > Visual C++ > Классическое приложение для Windows. На центральной панели выберите Мастер классических приложений Windows.
В диалоговом окне Проект классического приложения Windows в разделе Тип приложения выберите Консольное приложение (EXE) .
В разделе Дополнительные параметры снимите флажок Предварительно откомпилированный заголовок, если он установлен.
После создания консольного приложения будет создана пустая программа. Имя исходного файла будет совпадать с ранее выбранным именем. В этом примере он имеет имя MathClient.cpp .
Создание консольного приложения C++, ссылающегося на статическую библиотеку, в Visual Studio 2015
В обозревателе решений щелкните правой кнопкой мыши узел верхнего уровня Решение StaticMath, чтобы открыть контекстное меню. Выберите пункты Добавить > Новый проект, чтобы открыть диалоговое окно Добавить новый проект.
В диалоговом окне Добавление нового проекта выберите Установленные > Visual C++ > Win32. В центральной области выберите Консольное приложение Win32.
В диалоговом окне Мастер приложений Win32 нажмите кнопку Далее.
На странице Параметры приложения выберите в поле Тип приложения пункт Консольное приложение. В разделе Дополнительные параметры снимите флажок Предварительно откомпилированный заголовок, а затем установите флажок Пустой проект. Чтобы создать проект, нажмите кнопку Готово.
Чтобы добавить исходный файл в пустой проект, откройте контекстное меню проекта MathClient в обозревателе решений, а затем выберите команду Добавить > Новый элемент.
В диалоговом окне Добавление нового элемента выберите пункт Visual C++ > Код. В центральной области выберите Файл C++ (.cpp) . Укажите имя исходного файла, например MathClient.cpp, и нажмите кнопку Добавить. Отобразится пустой исходный файл.
Использование функциональности из статической библиотеки в приложении
Использование функциональности из статической библиотеки в приложении
Для использования математических процедур из статической библиотеки необходимо сослаться на эту библиотеку. В обозревателе решений откройте контекстное меню проекта MathClient, а затем выберите команду Добавить > Ссылка.
В диалоговом окне Добавление ссылки перечислены библиотеки, на которые можно создать ссылку. На вкладке Проекты перечислены проекты текущего решения и все библиотеки, на которые они ссылаются. На вкладке Проекты установите флажок MathLibrary, а затем нажмите кнопку ОК.
Перейдите на страницу свойств Свойства конфигурации > C/C++ > Общие. В свойстве Дополнительные каталоги включаемых файлов укажите путь к каталогу MathLibrary или найдите этот каталог.
Чтобы найти путь к каталогу, выполните указанные ниже действия.
Откройте раскрывающийся список значений свойства Дополнительные каталоги включаемых файлов, а затем выберите Изменить.
В диалоговом окне Выбор каталога перейдите на уровень вверх и выберите каталог MathLibrary. Затем нажмите кнопку Выбрать папку, чтобы сохранить выбор.
В диалоговом окне Дополнительные каталоги включаемых файлов нажмите кнопку ОК.
Чтобы выполнить сборку исполняемого файла, выберите в строке меню команду Сборка > Собрать решение.
Запуск приложения
Запуск приложения
Убедитесь в том, что проект MathClient выбран в качестве проекта по умолчанию. Чтобы выбрать его, в обозревателе решений откройте контекстное меню проекта MathClient и выберите команду Назначить запускаемым проектом.
Чтобы запустить проект, в строке меню выберите Отладка > Запуск без отладки. Выходные данные должны выглядеть примерно так:
Как же подключить/загрузить внешнюю динамическую библиотеку в свою программу/проект, написанную на языке программирования C++ в IDE Microsoft Visual Studio, в ОС Microsoft Windows?
Состав
Типы файлов
Для начала, давайте разберёмся, что обычно представляет собой любая динамическая библиотека, написанная на, и созданная для программ С++? Это от 1 до 4 типов файлов:
Из всего списка главным являются только файлы с расширением .dll, т.е. остальных файлов может и не быть.
Количество
У одной библиотеки может быть множество файлов таких типов. Все они, обычно, рассортированы по соответствующим папкам, чтобы было легче подключать в IDE.
Вариации
Файлы dll, lib и exp различаются по платформе (ОС), архитектуре, конфигурации, etc. В одной версии библиотеки может предоставляться сразу несколько альтернативных вариаций одинаковых по функционалу файлов. E.g.:
Всё это крайне важно, всё надо учитывать при подключении библиотеки к проекту. Свойства проекта в Visual C++ могут устанавливаться отдельно для каждой конфигурации (Release, Debug) и архитектуры/платформы (x32 (x86), x64).
Подключение
Перед тем, как подключать файлы библиотеки к своей программе, надо сперва открыть необходимый проект в IDE Visual Studio: Главное меню > Файл > Открыть проект.
Заголовочные файлы (.h)
Файлы таблиц импорта и экспорта (.lib, .exp)
Файл таблицы импорта (.lib)
Помимо указания IDE директории расположения файлов таблиц импорта (.lib), их также для линковки надо дополнительно явно указать. Сделать это можно двумя способами:
- MT_StaticRelease
- MTd_StaticDebug
- MD_DynamicRelease
- Application type (тип приложения) установить в Static Library (статическая библиотека);
- Снять флажок с пункта Precompiled header (прекомпилированный заголовок).
-
Прописать полные названия (путь, название и расширение) .lib файлов сюда: Главное меню > Проект > Свойства проекта > Свойства конфигурации > Компоновщик > Ввод > Дополнительные зависимости. Каждая библиотека в отдельной строке. Кавычки необязательны.
В итоге они будут вписаны автоматически в строку в двойных кавычках через точку с запятой (;). E.g.:
Можно использовать сразу два способа.
Я рекомендую использовать второй вариант, когда все подключения пишутся непосредственно в коде. Так нагляднее и переносимость кода увеличивается, когда всё, что нужно написано в самом коде, а не где-то там в настройках IDE.
Файлы библиотек (.dll)
Параметры конфигурации препроцессора
Также не забывайте указывать параметры конфигурации препроцессора тут: Главное меню > Проект > Свойства проекта > Свойства конфигурации > C/C++ > Препроцессор > Определения препроцессора. Параметры являются комбинированием в определённой последовательности определённых литералов. Вот некоторые из них:
Некоторые возможные варианты параметров:
Это далеко не все возможные параметры.
Примечания
Пути директории указывать без конечного слеша.
Опция Компоновщик
Библиотеки
Заключение
На самом деле, подключать сразу столько всего зачастую не нужно. Как правило, предоставляется только исходный код и всё. Приходится самостоятельно из исходников компилировать библиотеки (файлы .dll и .lib). Т.е. нужно будет указать только заголовочные файлы .h, которые являются частью исходников.
Библиотека представляет собой набор функций [20.1]. Когда программа использует библиотечную функцию, редактор связей находит эту функцию и добавляет ее код в программу. Исполняемый файл содержит только те функции, которые используются программой, а не все библиотечные функции [20.1].
Статически подключаемая библиотека содержит набор уже откомпилированных объектных файлов с функциями и данными. Библиотеки целесообразно применять для хранения функций, которые могут быть использованы при создании различных программ, реализующих распространенные алгоритмы и осуществляющих поддержку и обработку распространенных структур данных.
Библиотека называется статически подключаемой, если код, содержащийся в ней, непосредственно компонуется к основной программе.
Механизм компиляции и компоновки программы на языке C требует, помимо наличия откомпилированного библиотечного модуля, присутствия заголовочных файлов ( h -файлов), содержащих объявления структур данных и прототипы функций, предоставляемых библиотекой.
Среда Visual Studio 2010 использует расширение .lib для библиотечных модулей. При создании статически подключаемой библиотеки в среде Visual Studio 2010 необходимо выполнить следующую последовательность действий.
Создать новый проект (пункты главного меню : File–New–Project ), выбрать тип проекта в списке Project types: Win32–Win32Project и задать имя проекта, например, containers. При необходимости можно указать место его расположения, используя кнопку Browse. В результате должна получиться форма, показанная на рис. 20.1.
Рис. 20.1. Окно создания проекта с подключаемой библиотекой
Далее следует нажать кнопку OK. Появится форма С заголовком "Win32 Application Wizard – containers.
На закладке Application Settings мастера создания проекта сделать следующие настройки:
После установки настроек появится форма ( рис. 20.2), которая представляет собой пустой проект статической библиотеки.
Рис. 20.2. Окно создания проекта с подключаемой библиотекой
Для завершения настройки закладки Application Settings следует нажать кнопку Finish. Появится форма, показанная на рис. 20.3.
Рис. 20.3. Окно пустого проекта для статической библиотеки
Добавление файлов в проект библиотеки осуществляется стандартным образом, как и для проекта Win32 Console Application . В соответствии с рис. 20.3существующие файлы, которые будут использоваться в многофайловом проекте, могут быть подключены при установки курсора мыши на папках Header Files , Resource Files, Source Files с последующим нажатием правой клавиши и выбором пункта меню Add, а именно Existing Item.
Для подключения h -файлов, т.е. *.h, следует обратиться к папке проекта Header Files , для подключения к проекту с-файлов, т. е. *.с, использовать папку Source Files .
Выполним подключение существующих файлов stack.h / stack.c, queue.h / queue.c, реализующие в простейшем виде две важные структуры данных – стек и очередь .
Так как статическая библиотека не является исполняемой программой, а только механизмом для хранения подпрограмм, то среди функций библиотеки не должно быть функции main() .
После подключения файлов получится форма, показанная на рис. 20.4, с открытой программой файла stack.h.
Рис. 20.4. Окно проекта статической библиотеки с подключенными файлами
До выполнения компиляции необходимо выполнить настройку проекта. Настройка параметров компилятора выполняется так же, как и для проекта Win32 Console Application . В частности, из пункта меню Project следует выбрать containers Properties (Alt+F7). После раскрытия узла Configuration Properties появится форма, показанная на рис. 20.5.
Сначала следует обратиться к пункту General. Затем, к закладке Character Set, в которой выбрать Use Multy-Byte Character Set (как и при настройке консольного приложения).
Далее необходимо раскрыть узел С/С++, в котором следует обратиться к закладке Code Generation, затем в другой панели закладка Enable C++ Exceptions устанавливается в положение No (как и при настройке консольного приложения).
Читайте также: