Как подключить h файл в visual studio
Как же подключить/загрузить внешнюю динамическую библиотеку в свою программу/проект, написанную на языке программирования 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), их также для линковки надо дополнительно явно указать. Сделать это можно двумя способами:
Можно использовать сразу два способа.
Я рекомендую использовать второй вариант, когда все подключения пишутся непосредственно в коде. Так нагляднее и переносимость кода увеличивается, когда всё, что нужно написано в самом коде, а не где-то там в настройках IDE.
Файлы библиотек (.dll)
Параметры конфигурации препроцессора
Также не забывайте указывать параметры конфигурации препроцессора тут: Главное меню > Проект > Свойства проекта > Свойства конфигурации > C/C++ > Препроцессор > Определения препроцессора. Параметры являются комбинированием в определённой последовательности определённых литералов. Вот некоторые из них:
Некоторые возможные варианты параметров:
- MT_StaticRelease
- MTd_StaticDebug
- MD_DynamicRelease
Это далеко не все возможные параметры.
Примечания
Пути директории указывать без конечного слеша.
Опция Компоновщик
Библиотеки
Заключение
На самом деле, подключать сразу столько всего зачастую не нужно. Как правило, предоставляется только исходный код и всё. Приходится самостоятельно из исходников компилировать библиотеки (файлы .dll и .lib). Т.е. нужно будет указать только заголовочные файлы .h, которые являются частью исходников.
Создание и использование статических библиотек .lib в visual studio.
Дальше нажимаем ок и мы переходим к следующему окошку.
Все дальше жмем готово и у нас создается новый проект в котором будут создаваться не программы exe а статические библиотеки lib.
Дальше в этот проект MyNewLib добавляем два файла один заголовочный я его назвал function.h от его код:
Распространяемые пакеты Microsoft Visual C++ (Visual C++ Redistributable) содержат необходимые компоненты для запуска игр и программ, разработанных с помощью соответствующих версий Visual Studio и, как правило, нужны при ошибках вида «Запуск программы невозможен» так как файлы DLL с названиями, начинающимися с msvcr или msvcp отсутствуют на компьютере. Чаще всего требуются компоненты Visual Studio 2012, 2013 и 2015, но есть возможность загрузки и установки распространяемых пакетов Visual C++ 2005-2019.
Далее в инструкции способы скачать распространяемые компоненты Visual C++ для Windows 10, 8.1 и Windows 7, x64 и x86 (32-бит) официальным способом с сайта Майкрософт и путем установки из стороннего источника, о проблемах, с которыми можно столкнуться при установке и дополнительная информация, которая может оказаться полезной.
Загрузка распространяемых пакетов Visual C++ с сайта Майкрософт
Первый из способов скачать компоненты Visual C++ — официальный и, соответственно, самый безопасный. Для загрузки доступны следующие компоненты (при этом некоторые из них можно загрузить разными способами).
- Visual Studio 2015-2019 — при установке этого набора устанавливаются все необходимые компоненты Visual C++ 2015, 2017 и 2019 в рамках одного файла установщика.
- Visual Studio 2013 (Visual C++ 12.0)
- Visual Studio 2012 (Visual C++ 11.0)
- Visual Studio 2010 SP1
- Visual Studio 2008 SP1
Важное примечание: если вы загружаете библиотеки для исправления ошибок при запуске игр и программ (DLL отсутствует), а ваша система — 64-разрядная, следует скачать и установить как x86 компоненты (для 32-бит), так и x64 версии, так как многим программам для запуска нужны библиотеки 32-бит (x86) даже в x64 Windows 10, 8.1 и Windows 7.
Порядок загрузки компонентов будет следующим:
Также на сайте Майкрософт доступны отдельные страницы для загрузки распространяемых пакетов Microsoft Visual C++ список таких страниц далее:
После скачивания нужных компонентов Visual C++, запускаем загруженные файлы и проходим весь процесс установки.
Возможные проблемы при установке:
- Если при установке отдельных компонентов вам сообщат, что они уже есть на компьютере, попробуйте установщик другой разрядности (возможно, не хватает именно его).
- Если вы уверены, что проблемы при запуске программ или игр вызваны каким-то набором компонентов, но он не устанавливается, посмотрите: присутствует ли он в списке в Панель управления — Программы и компоненты. Если да, то попробуйте удалить его там и заново запустить установщик.
- Если вы отключали какие-либо службы Windows 10, 8.1 и Windows 7, связанные с обновлениями или «установщиком Windows», это может приводить к ошибкам при установке библиотек Visual C++.
- Отдельные инструкции про ошибку 0x80070666 при установке компонентов Visual C++ и Неопознанную ошибку 0x80240017.
Неофициальный способ скачать библиотеки DLL — Visual C++ Runtime Installer (All-In-One)
Есть и неофициальные установщики необходимых для запуска программ DLL файлов Visual Studio. Один из таких установщиков, судя по всему, безопасный (три обнаружения в VirusTotal похожи на ложные срабатывания) — Visual C++ Runtime Installer (All-In-One), устанавливающий сразу все необходимые компоненты (x86 и x64) из одного установщика.
Процесс установки выглядит следующим образом:
- Запуск установщика и нажатие Y в окне установщика.
- Дальнейший процесс установки будет автоматическим, при этом, перед установкой компонентов, существующие наборы распространяемых пакетов Visual Studio будут удалены с компьютера. Устанавливаются распространяемые пакеты Visual C++ 2005-2017 годов, а также дополнительные библиотеки.
Видео инструкция
Если остаются вопросы, задавайте в комментариях, но, надеюсь, проблемы были решены, а необходимые компоненты установлены.
Имена программных элементов, таких как переменные, функции, классы и т. д., должны быть объявлены до их использования. Например, вы не можете просто написать x = 42 без первого объявления "x".
Объявление указывает компилятору, является ли элемент элементом int , функцией double , а class также какой-либо другой вещью. Кроме того, каждое имя должно быть объявлено (прямо или косвенно) в каждом CPP-файле, в котором он используется. При компиляции программы каждый CPP-файл компилируется независимо в единицу компиляции. Компилятор не знает, какие имена объявляются в других единицах компиляции. Это означает, что если вы определяете класс или функцию или глобальную переменную, необходимо предоставить объявление этой вещи в каждом дополнительном CPP-файле, который использует его. Каждое объявление этой вещи должно быть точно идентичным во всех файлах. Небольшое несоответствие приведет к ошибкам или непреднамеренное поведение, когда компоновщик пытается объединить все блоки компиляции в одну программу.
В Visual Studio 2019 г. функция модулей C++20 появилась как улучшение и итоговая замена файлов заголовков. Дополнительные сведения см. в разделе "Обзор модулей" в C++.
Пример
В следующем примере показан распространенный способ объявления класса и последующего использования его в другом исходном файле. Начнем с файла заголовка. my_class.h Он содержит определение класса, но обратите внимание, что определение является неполным; Функция-член do_something не определена:
В файле реализации можно использовать using оператор, чтобы избежать необходимости указывать все упоминания "my_class" или "cout" с "N::" или "std::". Не помещайте using инструкции в файлы заголовков!
После завершения компиляции каждого CPP-файла в OBJ-файлы он передает OBJ-файлы компоновщику. При слиянии файлов объектов компоновщик находит только одно определение для my_class; он находится в OBJ-файле, создаваемом для my_class.cpp, и сборка завершается успешно.
Включение охранников
Что нужно поместить в файл заголовка
Так как файл заголовка может быть включен несколькими файлами, он не может содержать определения, которые могут создавать несколько определений одного и того же имени. Следующие действия не допускаются или считаются очень плохой практикой.
- встроенные определения типов в пространстве имен или глобальной области
- Определения функций, отличных от встроенных
- Определения переменных, отличных от const
- агрегатные определения
- безымянные пространства имен
- Директивы using
using Использование директивы не обязательно приведет к ошибке, но может вызвать проблему, так как она добавляет пространство имен в область в каждом CPP-файле, который прямо или косвенно включает этот заголовок.
Пример файла заголовка
В следующем примере показаны различные типы объявлений и определений, разрешенных в файле заголовка:
Использование скачанных библиотек с помощью vcpkg
Если вы хотите использовать скачанную библиотеку с помощью диспетчера пакетов vcpkg, то приведенные ниже инструкции можно пропустить. дополнительные сведения см. в разделе vcpkg. io.
Использование статических библиотек
Если проект статической библиотеки был создан в том же решении:
Если статическая библиотека не входит в состав решения:
- Щелкните правой кнопкой мыши узел проекта приложения в обозревателе решений и выберите Свойства.
- На странице свойств Каталоги VC++ добавьте в раздел Пути библиотек путь к каталогу, который содержит LIB-файл. Затем добавьте в раздел Включаемые каталоги путь к файлам заголовков библиотеки.
- На странице входное свойство компоновщика > добавьте имя файла lib в Дополнительные зависимости.
Библиотеки динамической компоновки
Если библиотека DLL была собрана в рамках того же решения, что и приложение, выполните те же действия, что и для статической библиотеки.
Если библиотека DLL не входит в состав решения приложения, вам потребуются DLL-файл, заголовки с прототипами для экспортируемых функций и классов, а также LIB-файл, содержащий необходимую для компоновки информацию.
- Скопируйте DLL-файл в папку выходных данных проекта или другую папку, которая задана в качестве стандартной для поиска библиотек DLL в Windows. Дополнительные сведения см. в статье Порядок поиска библиотек динамической компоновки.
- Выполните шаги с 1 по 3 для статических библиотек, чтобы задать пути к заголовкам и LIB-файлу.
COM-объекты
Свойства ссылки
Каждый тип ссылки имеет свойства. Свойства можно просмотреть, выбрав ссылку в обозревателе решений и нажав клавиши Alt + ВВОД. Также можно щелкнуть ссылку правой кнопкой мыши и выбрать пункт Свойства. Одни свойства доступны только для чтения, другие можно изменять. Тем не менее обычно эти свойства не требуется изменять вручную.
Свойства ссылки ActiveX
Свойства ссылки ActiveX доступны только для компонентов COM. Данные свойства отображаются только тогда, когда в панели Ссылки выбран компонент COM. Эти свойства нельзя изменить.
Управление полным путем
Отображает путь к каталогу элемента управления, на который указывает ссылка.
GUID элемента управления
Отображает GUID для элемента управления ActiveX.
Версия элемента управления
Отображает версию элемента управления ActiveX, на который указывает ссылка.
Имя библиотеки типов
Отображает имя библиотеки типов, на которую указывает ссылка.
Средство программы-оболочки
Отображает средство, которое используется для создания сборки взаимодействия из указанной библиотеки COM или элемента управления ActiveX.
Свойства ссылки на сборку (C++/CLI)
Относительный путь
Отображает относительный путь от каталога проекта к сборке, на которую указывает ссылка.
Свойства сборки
Следующие свойства доступны для различных типов ссылок. Они позволяют задавать способ построения со ссылками.
Копировать локальные
Указывает, следует ли автоматически копировать сборку, на которую указывает ссылка, в целевое расположение во время сборки.
Копировать локальные вспомогательные сборки (C++/CLI)
Указывает, следует ли автоматически копировать вспомогательные сборки ссылочной сборки в целевое расположение во время сборки. Используется, только если для параметра Копировать локальные задано значение true .
Выходные данные ссылочной сборки
Указывает, что эта сборка используется в процессе сборки. true означает, что эта сборка используется в командной строке компилятора во время выполнения сборки.
Свойства ссылок проектов на проекты
Следующие свойства определяют ссылку проекта на проект из проекта, выбранного в панели Ссылки, на другой проект в том же решении. Дополнительные сведения см. в статье Управление ссылками в проекте.
Компоновать зависимости библиотек
Если это свойство имеет значение True, система проектов установит в зависимом проекте связь с LIB-файлами, создаваемыми независимым проектом. Обычно устанавливается значение True.
Идентификатор проекта
Уникальный идентификатор независимого проекта. Значение свойства — это GUID внутренней системы, который невозможно изменить.
Использовать входные данные зависимостей библиотек
Если это свойство имеет значение False, система проектов не установит в зависимом проекте связь с OBJ-файлами для библиотеки, созданной независимым проектом. Таким образом, это значение отключает инкрементную компоновку. Обычно указывается значение False, так как при наличии множества независимых проектов сборка приложения может занять длительное время.
Имя сборки
Отображает имя сборки для сборки, на которую указывает ссылка.
Язык и региональные параметры
Отображает язык и региональные параметры выбранной ссылки.
Описание
Отображает описание выбранной ссылки.
Полный путь
Отображает путь к каталогу сборки, на которую указывает ссылка.
Удостоверение
Label
Отображает метку ссылки.
Name
Отображает имя ссылки.
Токен открытого ключа
Отображает токен открытого ключа для идентификации сборки, на которую указывает ссылка.
Строгое имя
true , если сборка, на которую указывает ссылка, имеет строгое имя. Сборка со строгим именем имеет уникальную версию.
Эта статья посвящена созданию и импорту блоков заголовков с Visual Studio 2022. Чтобы узнать, как импортировать заголовки стандартной библиотеки шаблонов в качестве блоков заголовков, см. пошаговое руководство. Импорт библиотек STL в качестве блоков заголовков.
В качестве альтернативы файлам предкомпилированных заголовков (PCH) рекомендуется использовать блоки заголовков. Единицы заголовков проще настраивать и использовать, значительно меньше на диске, обеспечивают аналогичные преимущества производительности и являются более гибкими, чем общая PCH.
Предварительные требования
Для использования блоков заголовков требуется Visual Studio 2019 версии 16.10 или более поздней.
Что такое блок заголовка
Блок заголовка — это двоичное представление файла заголовка. Блок заголовка заканчивается расширением .ifc . Тот же формат используется для именованных модулей.
Блоки заголовков можно импортировать в любом порядке. Это не относится к файлам заголовков, так как определения макросов, определенные в одном файле заголовка, могут повлиять на последующий файл заголовка. Определения макросов в одном блоке заголовка не могут повлиять на другую единицу заголовка.
Все, что видно из файла заголовка, также отображается из блока заголовка, включая макросы, определенные в блоке заголовка.
Перед импортом файла заголовка необходимо преобразовать в блок заголовка. Преимущество блоков заголовков по сравнению с PCH заключается в том, что их можно использовать в распределенных сборках. Например, если вы компилируете .ifc и программу, импортируемую с одним компилятором, и нацелив на ту же платформу и архитектуру, единицу заголовка, созданную на одном компьютере, можно использовать на другом. В отличие от PCH, когда блок заголовка изменяет только его и что зависит от него перестроения. Единицы заголовка могут быть меньше размера, чем традиционные .pch .
Блоки заголовков накладывают меньше ограничений на равенство параметров компилятора, используемых для создания блока заголовка и компиляции кода, который использует его, чем PCH. Однако некоторые сочетания переключателей и определения макросов могут создавать нарушения одного правила определения (ODR) между различными единицами перевода.
Наконец, блоки заголовков являются более гибкими, чем PCH. При использовании PCH нельзя использовать только один из заголовков в PCH- компилятор обрабатывает все из них. При использовании блоков заголовков даже при компиляции их в статическую библиотеку можно перенести только содержимое блока заголовка, импортируемого в приложение.
Блоки заголовков — это шаг между файлами заголовков и модулями C++ 20. Они предоставляют некоторые преимущества модулей. Они более надежны, так как внешние определения макросов не влияют на них, поэтому их можно импортировать в любом порядке, не затрагивая друг друга. Компилятор может обрабатывать их быстрее, чем файлы заголовков. Но они не имеют всех преимуществ модулей, так как они предоставляют макросы, определенные в них (модули не имеют) и в отличие от модулей нет способа скрыть частную реализацию. Чтобы указать частную реализацию с файлами заголовков, используются различные методы, такие как добавление символов подчеркивания в имена или размещение в пространстве имен реализации. Модуль не предоставляет частную реализацию в любой форме, поэтому этого не нужно делать.
Попробуйте заменить реализацию PCH блоками заголовков. Вы получаете то же преимущество скорости, но другие преимущества гигиены и гибкости кода, а также.
Способы компиляции блока заголовка
Существует несколько способов компиляции файла в блок заголовка:
Выберите отдельные файлы для преобразования в блоки заголовков. Такой подход позволяет управлять тем, что рассматривается как блок заголовка. Это также полезно, если необходимо скомпилировать файл в виде блока заголовка, так как он не имеет расширения по умолчанию ( .ixx , .cppm , , .h ), .hpp обычно не компилируется в блок заголовка. Именно этот подход демонстрируется в этом пошаговом руководстве. Чтобы приступить к работе, см . подход 1. Выбор отдельных единиц заголовков для сборки.
Создание проекта с общим заголовком. Это рекомендуемый подход и обеспечивает больший контроль над организацией и повторное использование импортированных блоков заголовков. Создайте проект статической библиотеки, содержащий нужные блоки заголовков, а затем со ссылкой на него, чтобы импортировать блоки заголовков. Пошаговое руководство по этому подходу см. в разделе "Создание проекта статической библиотеки блока заголовка" для блоков заголовков.
Автоматическое сканирование и сборка блоков заголовков. Этот подход удобен, но лучше всего подходит для небольших проектов, так как он не гарантирует оптимальную пропускную способность сборки. Дополнительные сведения об этом подходе см. в разделе "Подход 2. Автоматическое сканирование единиц заголовка".
Подход 1. Выбор блоков заголовков для сборки
В этом разделе показано, как выбрать конкретный файл для преобразования в блок заголовка. Скомпилируйте файл заголовка в виде блока заголовка, выполнив следующие действия в Visual Studio:
Создайте проект консольного приложения С++.
Замените содержимое исходного файла следующим кодом:
Добавьте вызываемый Pythagorean.h файл заголовка, а затем замените его содержимое следующим кодом:
Настройка свойств проекта
Чтобы включить блоки заголовков, сначала задайте стандарт языка C++ значение /std:c++20 или более позднюю версию, выполнив следующие действия:
Скомпилируйте файл заголовка в виде блока заголовка:
В Обозреватель решений выберите файл, который требуется скомпилировать в виде блока заголовка (в данном случае Pythagorean.h ). Щелкните файл правой кнопкой мыши и выберите пункт "Свойства".
Задайте в раскрывающемся списке свойств конфигурацииtypeGeneralItem >>значение компилятора C/C++ и нажмите кнопку "ОК".
Далее в этом пошаговом руководстве при сборке этого проекта Pythagorean.h будет переведено в блок заголовка. Это связано с тем, что тип элемента для этого файла заголовка имеет значение компиляторА C/C++, и поскольку действие по умолчанию для .h и .hpp файлов, заданных таким образом, заключается в преобразовывании файла в блок заголовка.
Изменение кода для импорта блока заголовка
Скомпилируйте решение, выбрав Сборка>Собрать решение в главном меню. Запустите его, чтобы увидеть, что он создает ожидаемые выходные данные: Pythagorean triple a:2 b:3 c:13
В собственных проектах повторите эту процедуру, чтобы скомпилировать файлы заголовков, которые нужно импортировать в качестве блоков заголовков.
Если вы хотите преобразовать только несколько файлов заголовков в блоки заголовков, этот подход подходит. Но если у вас есть много файлов заголовков, которые требуется скомпилировать, и удобство автоматической обработки системы сборки перевешивает потенциальное влияние на производительность сборки, см. следующий раздел.
Если вы хотите импортировать заголовки библиотекИ STL в качестве блоков заголовков, см. пошаговое руководство. Импорт библиотек STL в качестве блоков заголовков.
Подход 2. Автоматическое сканирование и сборка блоков заголовков
Из-за сканирования всех исходных файлов для поиска и сборки блоков заголовков этот подход лучше всего подходит для небольших проектов, так как он не гарантирует оптимальную пропускную способность сборки.
Этот подход объединяет два параметра проекта Visual Studio:
Эти параметры можно включить в свойствах проекта. Для этого щелкните правой кнопкой мыши проект в Обозреватель решений и выберите пункт "Свойства". Затем выберите "Свойства> конфигурации" /C++>General.
Источники сканирования для зависимостей модулей можно задать для всех файлов в проекте в Project свойствах, как показано здесь, или для отдельных файлов в свойствах файла. Модули и блоки заголовков всегда проверяются. Установите этот параметр, если у вас есть .cpp файл, который импортирует блоки заголовков, которые вы хотите создать автоматически и может еще не быть построен.
Эти параметры работают вместе для автоматической сборки и импорта блоков заголовков в следующих условиях:
Файл header-units.json служит двум целям. Помимо указания файлов заголовков, которые можно скомпилировать в блоки заголовков, он сводит к минимуму повторяющиеся символы для увеличения пропускной способности сборки. Дополнительные сведения о дублировании символов см. в справочнике по заголовкам C++ header-units.json.
Эти коммутаторы и header-unit.json предоставляют некоторые преимущества единиц заголовка. Удобство приходит за счет пропускной способности сборки. Этот подход может оказаться не лучшим для крупных проектов, так как он не гарантирует оптимальное время сборки. Кроме того, одни и те же файлы заголовков могут повторно обрабатываться повторно, что увеличивает время сборки. Однако удобство может быть полезно в зависимости от проекта.
Пример использования этого метода для импорта файлов заголовков STL в качестве единиц заголовка см. в пошаговом руководстве. Импорт библиотек STL в качестве блоков заголовков.
Как же подключить/загрузить внешнюю динамическую библиотеку в свою программу/проект, написанную на языке программирования C++ в IDE Microsoft Visual Studio, в ОС Microsoft Windows?
Состав
Типы файлов
Для начала, давайте разберёмся, что обычно представляет собой любая динамическая библиотека, написанная на, и созданная для программ С++? Это от 1 до 4 типов файлов:
- Some.h — заголовочный файл, который объявляет функционал библиотеки, i.e., заголовочный текстовый файл с определениями всех доступных сущностей (переменных, констант, классов, методов, etc) данной библиотеки, которые можно вызывать и использовать.
- Some.dll — предварительно скомпилированный бинарный файл, содержащий реализацию функционала библиотеки, т.е. непосредственно, сама динамическая библиотека. Чаще именуется просто как «dll библиотека».
- Some.lib — библиотека импорта, содержащая таблицу импорта библиотеки. Это не статическая библиотека. Несмотря на то, что расширение файла библиотеки импорта совпадает со стандартным расширением статических библиотек, путать их не стоит.
- Some.exp — библиотека экспорта, содержащая таблицу экспорта библиотеки.
Из всего списка главным являются только файлы с расширением .dll, т.е. остальных файлов может и не быть.
Количество
У одной библиотеки может быть множество файлов таких типов. Все они, обычно, рассортированы по соответствующим папкам, чтобы было легче подключать в IDE.
Вариации
Файлы dll, lib и exp различаются по платформе (ОС), архитектуре, конфигурации, etc. В одной версии библиотеки может предоставляться сразу несколько альтернативных вариаций одинаковых по функционалу файлов. E.g.:
- Для x32 (x86) и x64 архитектуры/платформы.
- Для конфигурации Release, Debug, etc. Для Debug конфигурации часто используются библиотеки с постфиксом *-d.dll, а для Release — без него.
- Для разных IDE.
- Для разных ОС. Составные файлы библиотек компилируется под каждую ОС отдельно, т.е. содержание и расширение зависит от ОС. E.g., в ОС MS Windows динамические библиотеки имеют расширение .dll, а в GNU/Linux — .so; статические в Win имеют расширение .lib, в ОС GNU/Linux — .a, соответственно.
Всё это крайне важно, всё надо учитывать при подключении библиотеки к проекту. Свойства проекта в Visual C++ могут устанавливаться отдельно для каждой конфигурации (Release, Debug) и архитектуры/платформы (x32 (x86), x64).
Подключение
Перед тем, как подключать файлы библиотеки к своей программе, надо сперва открыть необходимый проект в IDE Visual Studio: Главное меню > Файл > Открыть проект.
Заголовочные файлы (.h)
Заголовочных файлов чаще всего больше одного. Все они, обычно, находятся в папке «include» в любой библиотеке.
Каталог с заголовчными файлами (.h) библиотеки указывать здесь: Главное меню > Проект > Свойства проекта > Свойства конфигурации > C/C++ > Общие > Дополнительные каталоги включаемых файлов.
Файлы таблиц импорта и экспорта (.lib, .exp)
Файлы таблиц импорта и экспорта (.lib, .exp), обычно, находятся в папке «lib» в любой библиотеке.
Каталог с файлами таблиц импорта (.lib) библиотеки указывать здесь: Главное меню > Проект > Свойства проекта > Свойства конфигурации > Компоновщик > Общие > Дополнительные каталоги библиотек.
Файл таблицы импорта (.lib)
Помимо указания IDE директории расположения файлов таблиц импорта (.lib), их также для линковки надо дополнительно явно указать. Сделать это можно двумя способами:
- Static — статичесий (для статических библиотек — .lib в Win),
- Dynamic — динамический (для динамических библиотек — .dll в Win),
- Release — релизная версия сборки,
- Debug — отладочная версия сборки,
- MT — многопоточная, MT от слов multi thread
- MTd — multi thread, debug
- MD — многопоточный динамический (DLL)
- MT_StaticRelease
- MTd_StaticDebug
- MD_DynamicRelease
-
Прописать полные названия (путь, название и расширение) .lib файлов сюда: Главное меню > Проект > Свойства проекта > Свойства конфигурации > Компоновщик > Ввод > Дополнительные зависимости. Каждая библиотека в отдельной строке. Кавычки необязательны.
В итоге они будут вписаны автоматически в строку в двойных кавычках через точку с запятой (;). E.g.:
Можно использовать сразу два способа.
Я рекомендую использовать второй вариант, когда все подключения пишутся непосредственно в коде. Так нагляднее и переносимость кода увеличивается, когда всё, что нужно написано в самом коде, а не где-то там в настройках IDE.
Файлы библиотек (.dll)
Файлы динамических библиотек (.dll), обычно, находятся в папке «bin» в любой библиотеке.
Путь к файлам динамических библиотек .dll нигде не укажешь. Файлы .dll надо класть в соответсвующие папки IDE или ОС, но легче и лучше всего положить в папку с самим исполняемым файлом программы/приложения.
Параметры конфигурации препроцессора
Также не забывайте указывать параметры конфигурации препроцессора тут: Главное меню > Проект > Свойства проекта > Свойства конфигурации > C/C++ > Препроцессор > Определения препроцессора. Параметры являются комбинированием в определённой последовательности определённых литералов. Вот некоторые из них:
Некоторые возможные варианты параметров:
Это далеко не все возможные параметры.
Эти параметры конфигурации препроцессора должны быть обязательно одинаковыми у всех используемых в проекте библиотек, иначе будет ошибка «Error LNK2038: несоответствие значений параметров конфигурации препроцессора» в объектных (.obj) файлах.
Примечания
Пути директории указывать без конечного слеша.
Опция Компоновщик
Когда проект представляет собой библиотеку, а не исполняемый файл, то опции Компоновщик нет. Это не потому, что для проектов типа «библиотека» указывать директории подключения др. библиотек не нужно и нельзя. Несмотря на то, что опции Компоновщик нет, директории библиотек указываются не только для проектов исполняемых файлов, а также и для библиотек. В этом случае вместо Компоновщика имеется опция Библиотекарь с примерно таким же функционалом.
Библиотеки
При запуске библиотек (файлы .dll и .lib) всегда будет выскакивать окно «с ошибкой» о том, что нельзя запустить этот файл и далее следует его точный путь. Это нормально т.к. библиотеки не запускаются в отличие от исполняемых файлов (.exe).
Заключение
На самом деле, подключать сразу столько всего зачастую не нужно. Как правило, предоставляется только исходный код и всё. Приходится самостоятельно из исходников компилировать библиотеки (файлы .dll и .lib). Т.е. нужно будет указать только заголовочные файлы .h, которые являются частью исходников.
Читайте также: