Создание библиотек DLL на C и C++ в Visual Studio
В Windows библиотека динамической компоновки (DLL) является исполняемым файлом, который выступает в качестве общей библиотеки функций и ресурсов. Динамическая компоновка — это возможность операционной системы. Она позволяет исполняемому файлу вызывать функции или использовать ресурсы, хранящиеся в отдельном файле. Эти функции и ресурсы можно компилировать и развертывать отдельно от использующих их исполняемых файлов.
Библиотека DLL не является отдельным исполняемым файлом. Библиотеки DLL выполняются в контексте приложений, которые их вызывают. Операционная система загружает библиотеку DLL в область памяти приложения. Это делается либо при загрузке приложения (неявная компоновка), либо по запросу во время выполнения (явная компоновка). Библиотеки DLL также упрощают совместное использование функций и ресурсов различными исполняемыми файлами. Несколько приложений могут осуществлять одновременный доступ к содержимому одной копии библиотеки DLL в памяти.
Различия между динамической и статической компоновкой
При статической компоновке весь код объектов копируется из статической библиотеки в использующие их исполняемые файлы во время сборки. При динамической компоновке включаются только те сведения, которые позволяют Windows найти и загрузить библиотеку DLL, содержащую элемент данных или функцию, во время выполнения. При создании библиотеки DLL также создается библиотека импорта, содержащая эту информацию. При сборке исполняемого файла, который вызывает библиотеку DLL, компоновщик использует экспортированные символы в библиотеке импорта, чтобы сохранить эти сведения для загрузчика Windows. Когда загрузчик загружает библиотеку DLL, она сопоставляется с областью памяти приложения. Для выполнения операций инициализации, необходимых библиотеке DLL, вызывается специальная функция DllMain из библиотеки DLL (если она имеется).
Различия между приложениями и библиотеками DLL
Хотя и библиотеки DLL, и приложения являются исполняемыми модулями, они отличаются некоторыми особенностями. Наиболее очевидное различие заключается в том, что библиотеку DLL нельзя запустить. С точки зрения системы, между приложениями и библиотеками DLL имеется два существенных различия.
- В системе может одновременно выполняться несколько экземпляров приложения. Экземпляр библиотеки DLL может быть только один.
- Приложение может загружаться как процесс. Ему могут принадлежать такие компоненты, как стек, потоки выполнения, глобальная память, дескрипторы файлов и очередь сообщений. У библиотеки DLL таких компонентов быть не может.
Преимущества использования библиотек DLL
Динамическая компоновка кода и ресурсов имеет некоторые преимущества над статической.
- Динамическая компоновка экономит память и сокращает подкачку. Многие процессы могут использовать библиотеку DLL совместно, одновременно обращаясь к одной доступной только для чтения копии ее частей в памяти. В отличие от этого, каждое приложение, созданное с помощью библиотеки статической компоновки, имеет полную копию кода библиотеки, которую система Windows должна загрузить в память.
- Динамическая компоновка экономит место на диске и пропускную способность. Несколько приложений могут совместно использовать одну копию библиотеки DLL на диске. В отличие от этого, каждое приложение, созданное с помощью библиотеки статической компоновки, имеет код библиотеки, связанный с исполняемым образом. Это увеличивает занимаемое на диске место и используемую для передачи данных пропускную способность.
- Обслуживание, применение исправлений для системы безопасности и обновление могут быть проще. Если приложения используют общие функции в библиотеке DLL, можно реализовать исправления ошибок и развернуть обновления для нее. При обновлении библиотек DLL использующие их приложения не нужно перекомпилировать или повторно компоновать. Они могут использовать новые библиотеки DLL сразу после их развертывания. В отличие от этого, при внесении исправлений в код статически скомпонованного объекта необходимо повторно скомпоновать и развернуть каждое использующее его приложение.
- С помощью библиотек DLL можно оказывать послепродажную поддержку. Например, библиотеку DLL драйвера дисплея можно изменить так, чтобы она поддерживала дисплей, который не был доступен на момент предоставления приложения.
- С помощью явной компоновки можно обнаруживать и загружать библиотеки DLL во время выполнения. Например, это могут быть расширения приложения, которые добавляют новые функциональные возможности без повторной сборки и развертывания приложения.
- Динамическая компоновка упрощает поддержку приложений, написанных на разных языках программирования. Программы, написанные на разных языках программирования, могут вызывать одну и ту же функцию в библиотеке DLL при условии соблюдения соглашения о ее вызове. Программы и функция DLL должны быть совместимы следующим образом: порядок, в котором функция ожидает передачи его аргументов в стек. выполнение очистки стека функцией или приложением; передача аргументов в регистрах.
- Динамическая компоновка обеспечивает механизм для расширения классов библиотеки Microsoft Foundation Classes (MFC). На основе существующих классов MFC можно создавать производные классы и помещать их в библиотеку расширения DLL, используемую приложениями MFC.
- Динамическая компоновка упрощает создание международных версий приложения. Библиотеки DLL — это удобный способ предоставления ресурсов для конкретных языковых стандартов, благодаря чему значительно упрощается создание международных версий приложения. Вместо предоставления множества локализованных версий приложения можно поместить строки и изображения для каждого языка в отдельную библиотеку DLL ресурсов. Затем приложение может загружать ресурсы для нужного языкового стандарта во время выполнения.
Возможный недостаток использования библиотек DLL заключается в том, что приложения не автономны. Они требуют наличия отдельного модуля DLL, которое должно проверяться в процессе установки.
Дополнительные сведения о создании и использовании библиотек DLL
В приведенных ниже статьях приводятся подробные сведения о создании библиотек DLL на C и C++ в Visual Studio.
Пошаговое руководство. Создание и использование библиотеки DLL (C++)
Описывает создание и использование библиотек DLL при помощи Visual Studio.
Виды библиотек DLL
Предоставляет сведения о различных типах библиотек DLL, которые доступны для сборки.
Вопросы и ответы по библиотекам DLL
Ответы на часто задаваемые вопросы о библиотеках DLL.
Связывание исполняемого файла с библиотекой DLL
Описание явного и неявного соединения с библиотекой DLL.
Инициализация библиотеки DLL
Описывается код инициализации библиотеки DLL, который должен выполняться при загрузке библиотеки DLL.
Библиотеки DLL и поведение библиотеки времени выполнения Visual C++
Описывается последовательность запуска библиотеки DLL средой выполнения.
Функции LoadLibrary и AfxLoadLibrary
Описывается использование функций LoadLibrary и AfxLoadLibrary для явной связи с библиотекой DLL во время выполнения.
Функция GetProcAddress
Описывается использование GetProcAddress для получения адреса экспортированной функции в DLL.
Функции FreeLibrary и AfxFreeLibrary
Описывается использование функций FreeLibrary и AfxFreeLibrary , когда модуль DLL больше не нужен.
Порядок поиска библиотеки динамической компоновки (DLL)
Описание пути поиска, который операционная система Windows использует для поиска библиотеки DLL в системе.
Состояния модулей обычной библиотеки DLL MFC, динамически связанной с MFC
Описываются состояния модулей обычной библиотеки DLL, динамически связываемой с MFC.
Библиотеки DLL для расширения MFC
Описываются библиотеки DLL, которые обычно реализуют классы многократного использования, производные от существующих классов MFC.
Создание библиотек DLL, содержащих только ресурсы
Библиотека DLL, содержащая только ресурсы, например значки, растровые изображения, строки и диалоговые окна.
Локализованные ресурсы в приложениях MFC: вспомогательные библиотеки DLL
Расширенная поддержка библиотек спутниковой связи DLL и содержит возможность, которая позволяет создавать приложения, локализированные на различные языки.
Импорт и экспорт
Импортирование открытых символов в приложение или экспортирование функций из библиотеки DLL
Технология Active и библиотеки DLL
Размещение серверов объектов внутри библиотеки DLL.
Автоматизация в библиотеке DLL
Параметр автоматизации в решениях мастера библиотек DLL MFC.
Соглашения об именовании библиотек DLL MFC
Способ встраивания библиотек DLL в MFC, опираясь на четко структурированное соглашение об именовании.
Связанные разделы
Использование MFC как части библиотеки DLL
Описываются постоянные библиотеки DLL MFC, которые позволяют использовать библиотеку MFC как часть библиотеки динамической компоновки Windows.
Версия библиотеки DLL MFC
Описывается механизм использования общих библиотек динамической компоновки MFCxx.dll и MFCxxD.dll (где x является номером версии MFC) с приложениями MFC и расширениями библиотек DLL MFC.
Руководство. Импорт стандартной библиотеки C++ с помощью модулей из командной строки
Узнайте, как импортировать стандартную библиотеку C++ с помощью модулей библиотекИ C++. Это приводит к значительно более быстрой компиляции и более надежной, чем использование файлов заголовков или блоков заголовков или предварительно скомпилированных заголовков (PCH).
В этом руководстве описано:
- Как импортировать стандартную библиотеку в виде модуля из командной строки.
- Преимущества производительности и удобства использования модулей.
- Два стандартных модуля библиотеки std и std.compat разница между ними.
Необходимые компоненты
Для работы с этим руководством требуется Visual Studio 2022 17.5 или более поздней версии.
Это руководство предназначено для предварительной версии функции. Эта функция подлежит изменению между предварительными версиями выпусков. В рабочем коде не следует использовать предварительные версии функций.
Общие сведения о модулях стандартной библиотеки
Файлы заголовков страдают от семантики, изменяющейся в зависимости от определений макросов, порядка их включения и медленной компиляции. Модули решают эти проблемы.
Теперь можно импортировать стандартную библиотеку в виде модуля вместо танга файлов заголовков. Это значительно быстрее и надежнее, чем в том числе файлы заголовков или блоки заголовков или предварительно скомпилированные заголовки (PCH).
Стандартная библиотека C++23 содержит два именованных модуля: std и std.compat .
- std экспортирует объявления и имена, определенные в стандартном пространстве std имен библиотеки C++, например std::vector и std::sort . Он также экспортирует содержимое заголовков оболочки C, таких как и , которые предоставляют такие функции, как std::printf() . Функции C, определенные в глобальном пространстве имен, например ::printf() , не экспортируются. Это улучшает ситуацию, когда в том числе заголовок оболочки C, как и файлы заголовков C, такие как stdio.h , которые привели к версиям глобального пространства имен C. Это не проблема при импорте std .
- std.compat экспортирует все и std добавляет глобальные пространства имен среды выполнения C, такие как ::printf , ::fopen , ::size_t и ::strlen т. д. Модуль std.compat упрощает работу с базами кода, которые ссылаются на многие функции и типы среды выполнения C в глобальном пространстве имен.
Компилятор импортирует всю стандартную библиотеку при использовании import std; или import std.compat; выполняет ее быстрее, чем при вводе в один файл заголовка. Т. е. быстрее принести всю стандартную библиотеку с import std; (или import std.compat ) чем именно #include так, например.
Так как именованные модули не предоставляют макросы, макросы, например assert , errno , offsetof и va_arg другие, недоступны при импорте std или std.compat . Рекомендации по обходным решениям см. в стандартной библиотеке именованных модулей.
Сведения о модулях C++
Файлы заголовков — это способ совместного использования объявлений и определений между исходными файлами в C++. Перед модулями стандартной библиотеки вы будете включать часть стандартной библиотеки, необходимую для директивы, например #include . Файлы заголовков являются хрупкими и трудными для создания, так как их семантика может изменяться в зависимости от порядка их включения, или определенных макросов или не определено. Они также медленно компилируются, так как они повторно обрабатывается каждым исходным файлом, который включает их.
В C++20 представлен современный альтернативный вариант, называемый модулями. В C++23 мы смогли использовать поддержку модулей, чтобы представить именованные модули для представления стандартной библиотеки.
Как и файлы заголовков, модули позволяют совместно использовать объявления и определения в исходных файлах. Но в отличие от файлов заголовков модули не хрупки и проще создавать их, так как их семантика не изменяется из-за определений макросов или порядка их импорта. Компилятор может обрабатывать модули значительно быстрее, чем может обрабатывать #include файлы, а также использовать меньше памяти во время компиляции. Именованные модули не предоставляют определения макросов или сведения о частной реализации.
Подробные сведения о модулях см. в разделе «Обзор модулей в C++ В этой статье также рассматривается использование стандартной библиотеки C++ в качестве модулей, но используется более старый и экспериментальный способ его выполнения».
В этой статье демонстрируется новый и лучший способ использования стандартной библиотеки. Дополнительные сведения о альтернативных способах использования стандартной библиотеки см. в статье «Сравнение единиц заголовков, модулей и предварительно скомпилированных заголовков».
Импорт стандартной библиотеки с помощью std
В следующих примерах показано, как использовать стандартную библиотеку в качестве модуля с помощью компилятора командной строки. Сведения о том, как это сделать в интегрированной среде разработки Visual Studio, см. в разделе «Сборка модулей стандартной библиотеки ISO C++23».
Инструкция import std; или import std.compat; импорт стандартной библиотеки в приложение. Но сначала необходимо скомпилировать стандартные именованные модули библиотеки. Ниже показано, как это сделать.
Пример: std
- Откройте командную строку собственных средств x86 для VS: в меню «Пуск» Windows введите собственный код x86, а в списке приложений должен появиться запрос. Убедитесь, что запрос предназначен для Visual Studio 2022 предварительной версии 17.5 или выше. Если вы используете неправильную версию запроса, вы получите ошибки. Примеры, используемые в этом руководстве, предназначены для оболочки CMD. Если вы используете PowerShell, используйте «$Env:VCToolsInstallDir\modules\std.ixx» вместо «%VCToolsInstallDir\modules\std.ixx» него .
- Создайте каталог, например %USERPROFILE%\source\repos\STLModules и сделайте его текущим каталогом. Если вы выберете каталог, в который у вас нет доступа на запись, вы получите ошибки, такие как отсутствие возможности открыть выходной файл std.ifc .
- Скомпилируйте именованный модуль с помощью следующей std команды:
cl /std:c++latest /EHsc /nologo /W4 /MTd /c "%VCToolsInstallDir%\modules\std.ixx"
- std.ifc — это скомпилированное двоичное представление именованного интерфейса модуля, который компилятор обращается к процессу инструкции import std; . Это артефакт только во время компиляции. Он не отправляется с приложением.
- std.obj содержит реализацию именованного модуля. Добавьте std.obj в командную строку при компиляции примера приложения для статического связывания функциональных возможностей, используемых из стандартной библиотеки в приложение.
Параметры командной строки в этом примере:
// requires /std:c++latest import std; int main() < std::cout v; for (const auto& e : v) < std::cout >
cl /std:c++latest /EHsc /nologo /W4 /MTd importExample.cpp std.obj
Нам не нужно указывать std.ifc в командной строке, так как компилятор автоматически ищет .ifc файл, соответствующий имени модуля, заданному инструкцией import . Когда компилятор встречается import std; , он находит std.ifc его, так как мы помещаем его в тот же каталог, что и исходный код, который позволяет нам указать его в командной строке. .ifc Если файл находится в каталоге, отличном от исходного кода, используйте параметр компилятора /reference для ссылки на него. Если вы создаете один проект, вы можете объединить шаги по созданию std стандартной библиотеки с именем модуля и этапу создания приложения, добавив «%VCToolsInstallDir%\modules\std.ixx» в командную строку. Не забудьте поместить его перед любыми .cpp файлами, которые его используют. По умолчанию имя выходного исполняемого файла берется из первого входного файла. Используйте параметр компилятора, чтобы указать нужное /Fe имя выходного файла. В этом руководстве показано, как скомпилировать именованный std модуль как отдельный шаг, так как необходимо создать стандартную библиотеку с именем модуля один раз, а затем можно ссылаться на него из проекта или из нескольких проектов. Но может быть удобно создать все вместе, как показано в этой командной строке:
cl /FeimportExample /std:c++latest /EHsc /nologo /W4 /MTd "%VCToolsInstallDir%\modules\std.ixx" importExample.cpp
Учитывая предыдущую командную строку, компилятор создает исполняемый файл с именем importExample.exe . При запуске он создает следующие выходные данные:
Import the STL library for best performance 555
Импорт стандартной библиотеки и глобальных функций C с помощью std.compat
Стандартная библиотека C++ включает стандартную библиотеку ISO C. Модуль std.compat предоставляет все функциональные возможности std модуля, например std::vector , std::cout , std::printf и std::scanf т. д. Но она также предоставляет версии глобального пространства имен таких функций, как ::printf , ::scanf , ::fopen и ::size_t т. д.
Именованный std.compat модуль — это уровень совместимости, предоставляемый для упрощения переноса существующего кода, который относится к функциям среды выполнения C в глобальном пространстве имен. Если вы хотите избежать добавления имен в глобальное пространство имен, используйте import std; . Если вам нужно упростить перенос базы кода, использующую множество неквалифицированных (т. е. глобальных пространств имен) функций среды выполнения C, используйте . import std.compat; Это обеспечивает имена среды выполнения C глобального пространства имен, чтобы не нужно было указывать все глобальные упоминание. std:: Если у вас нет существующего кода, использующего функции среды выполнения C глобального пространства имен, вам не нужно использовать import std.compat; . Если вы вызываете только несколько функций среды выполнения C в коде, возможно, лучше использовать import std; и указать несколько имен глобального пространства имен C, которым он std:: нужен. Например, std::printf() . Если при попытке компиляции кода возникает ошибка error C3861: ‘printf’: identifier not found , рассмотрите возможность import std.compat; импорта функций среды выполнения C глобального пространства имен.
Пример: std.compat
Прежде чем использовать import std.compat; в коде, необходимо скомпилировать именованный модуль std.compat.ixx . Действия аналогичны созданию именованного std модуля. Эти шаги включают создание именованного std модуля в первую очередь, так как std.compat зависит от него:
- Откройте командную строку собственных средств для VS: в меню «Пуск» Windows введите собственный код x86 и в списке приложений должна появиться строка. Убедитесь, что запрос предназначен для Visual Studio 2022 предварительной версии 17.5 или выше. Если вы используете неправильную версию запроса, вы получите ошибки компилятора.
- Создайте каталог, чтобы попробовать этот пример, например %USERPROFILE%\source\repos\STLModules , и сделать его текущим каталогом. Если вы выберете каталог, в который у вас нет доступа на запись, вы получите ошибки, такие как отсутствие возможности открыть выходной файл std.ifc .
- std Скомпилируйте и std.compat именованные модули с помощью следующей команды:
cl /std:c++latest /EHsc /nologo /W4 /MTd /c "%VCToolsInstallDir%\modules\std.ixx" "%VCToolsInstallDir%\modules\std.compat.ixx"
- std.ifc — это скомпилированный двоичный именованный интерфейс модуля, который компилятор обращается к процессу инструкции import std; . Компилятор также обращается к std.ifc процессу, так как std.compat выполняет сборку std import std.compat; . Это артефакт только во время компиляции. Он не отправляется с приложением.
- std.obj содержит реализацию стандартной библиотеки.
- std.compat.ifc — это скомпилированный двоичный именованный интерфейс модуля, который компилятор обращается к процессу инструкции import std.compat; . Это артефакт только во время компиляции. Он не отправляется с приложением.
- std.compat.obj содержит реализацию. Однако большая часть реализации предоставляется std.obj . Добавьте std.obj в командную строку при компиляции примера приложения для статического связывания функциональных возможностей, используемых из стандартной библиотеки в приложение.
import std.compat; int main() < printf("Import std.compat to get global names like printf()\n"); std::vectorv; for (const auto& e : v) < printf("%i", e); >>
cl /std:c++latest /EHsc /nologo /W4 /MTd stdCompatExample.cpp std.obj std.compat.obj
Нам не нужно указывать std.compat.ifc в командной строке, так как компилятор автоматически ищет .ifc файл, соответствующий имени модуля в инструкции import . Когда компилятор обнаруживает import std.compat; его std.compat.ifc , так как мы помещаем его в тот же каталог, что и исходный код, который позволяет нам указать его в командной строке. .ifc Если файл находится в каталоге, отличном от исходного кода, используйте параметр компилятора /reference для ссылки на него. Несмотря на то, что мы импортируем std.compat , необходимо также ссылаться на std.obj то, что именно здесь живет реализация стандартной библиотеки, std.compat которая основана на. Если вы создаете один проект, вы можете объединить этап создания std именованных модулей и std.compat стандартной библиотеки с шагом сборки приложения, добавив «%VCToolsInstallDir%\modules\std.ixx» и «%VCToolsInstallDir%\modules\std.compat.ixx» (в этом порядке) в командную строку. Не забудьте поместить их перед любыми .cpp файлами, которые используют их, и укажите /Fe имя встроенного, exe как показано в этом примере:
cl /FestdCompatExample /std:c++latest /EHsc /nologo /W4 /MTd "%VCToolsInstallDir%\modules\std.ixx" "%VCToolsInstallDir%\modules\std.compat.ixx" stdCompatExample.cpp
В этом руководстве они отображаются в виде отдельных шагов, так как вам нужно создать только стандартные библиотеки именованных модулей один раз, а затем вы можете ссылаться на них из проекта или из нескольких проектов. Но это может быть удобно, чтобы построить их сразу. Предыдущая команда компилятора создает исполняемый файл с именем stdCompatExample.exe . При запуске он создает следующие выходные данные:
Import std.compat to get global names like printf() 555
Рекомендации по использованию стандартной библиотеки с именем модуля
Управление версиями именованных модулей совпадает с заголовками. Файлы .ixx именованных модулей живут вместе с заголовками, например «%VCToolsInstallDir%\modules\std.ixx : который разрешается C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.35.32019\modules\std.ixx в версии средств, используемых во время этой записи. Выберите версию именованного модуля, чтобы использовать так же, как и версия файла заголовка для использования каталогом, который вы ссылаетесь на них.
Не смешивайте и не сопоставляйте блоки заголовков и именованные модули. Например, не import ; import std; и в одном файле.
Не смешивайте и не сопоставляйте файлы заголовков стандартной библиотеки C++ и именованные модули. Например, не #include import std; и в одном файле. Однако вы можете включить заголовки C и импортировать именованные модули в один и тот же файл. Например, можно import std; и #include в одном файле. Просто не включайте стандартную версию библиотеки C++ .
Вам не нужно защищаться от импорта модуля несколько раз: защита заголовков #ifndef не требуется. Компилятор знает, когда он уже импортировал именованный модуль и игнорирует повторяющиеся попытки сделать это.
Если необходимо использовать assert() макрос, то #include .
Если необходимо использовать errno макрос, #include . Так как именованные модули не предоставляют макросы, это обходное решение, если необходимо проверка для ошибок , например.
Макросы, такие как NAN INFINITY , и INT_MIN определяются с помощью которых можно включить. Однако, если вы import std; можете использовать numeric_limits::quiet_NaN() и numeric_limits::infinity() вместо NAN INFINITY него, а std::numeric_limits::min() не INT_MIN .
Итоги
В этом руководстве вы импортировали стандартную библиотеку с помощью модулей. Далее вы узнаете о создании и импорте собственных модулей в учебнике по именованным модулям в C++.
Как добавить библиотеку в Visual Studio 2019
Библиотеки на C++ — это наборы кода, написанного кем-то другим. Они избавляют вас от необходимости изобретать велосипед, когда вам нужно реализовать какую-то желаемую функциональность. Вы можете думать о библиотеках как о подключаемом модуле или дополнении, которое дает вам больше возможностей.
Например, я хотел написать программу, способную перемножать две матрицы. Вместо того, чтобы писать код с нуля, я поискал в Интернете библиотеку линейной алгебры на C++, которая содержала функции для умножения матриц. Я нашел библиотеку под названием «Эйген». Я добавил библиотеку в свой проект в интегрированной среде разработки CodeLite и был готов к работе.
Без лишних слов, вот пошаговый процесс добавления внешней библиотеки C++ в ваш проект с помощью интегрированной среды разработки CodeLite и интегрированной среды разработки Visual Studio.
Обратите внимание, что этот процесс будет другим, если вы используете другую IDE для C++, но два основных шага одинаковы для всех IDE:
- Добавить путь к файлам заголовков
- Добавить путь к фактическому коду (т. е. к библиотеке)
Шаг 1. Перейдите на веб-сайт библиотеки.
Например, для библиотеки линейной алгебры Eigen перейдите на эту страницу: Главная страница Eigen
Шаг 2. Загрузите ZIP-файл, содержащий весь код.
Шаг 3. Разархивируйте ZIP-файл на свой компьютер.
Шаг 4. Откройте CodeLite (т. е. вашу IDE)
Шаг 5. Откройте новый проект
Шаг 6. Щелкните правой кнопкой мыши имя проекта и выберите «Настройки».
Шаг 7. Перейдите на вкладку «Компилятор» и добавьте пути включения:
например, папка, содержащая папку с именем «Eigen»… C:\XYZ\eigen-eigen-21301928\
Здесь компилятор может найти файлы .h (т.е. заголовки)
Шаг 8. Нажмите Linker и добавьте путь поиска библиотек
например, C:\XYZ\eigen-eigen-21301928\
Путь выше должен быть местом, где компоновщик может найти библиотеки (обычно с суффиксом .a, .dll, .lib, .so)
- Статические библиотеки — XYZ.lib для Windows, UNIX/Linux/Max — libXYZ.a
- Динамические библиотеки — XYZ.dll для Windows, Unix/Linux/Mac — libXYZ.so
Шаг 9. Перейдите к файлу main.cc (т. е. ваш файл с исходным кодом. также может быть main.cpp) и добавьте директивы препроцессора вверху исходного файла. Вы можете использовать этот код, чтобы проверить правильность настройки.
Шаг 3. Разархивируйте ZIP-файл на свой компьютер.

Шаг 4. Переместите папку в какой-либо каталог на вашем компьютере.
Я перемещу его в каталог C:\libraries. На данном этапе Эйген идет по следующему пути для меня:

Шаг 5. Откройте Visual Studio.
Шаг 6. Создайте новый проект C++.
Шаг 7. Напишите следующий код в новый исходный файл.
Я назову этот файл main.cpp.
Шаг 8. Нажмите на вкладку «Проект» вверху и перейдите в раздел «Дополнительные включаемые каталоги».
Проект -> Свойства -> C/C++ -> Общие (его можно найти, развернув маленький треугольник рядом с C/C++) -> Дополнительные включаемые каталоги

Шаг 9. Нажмите на пустое место рядом с «Дополнительные каталоги включения».
Должен появиться небольшой раскрывающийся список в виде треугольника.
Шаг 11. Нажмите значок «Добавить новую строку».

Шаг 12. Добавьте путь к папке, содержащей Eigen
Если щелкнуть пустое место, должен появиться значок с тремя точками «…». Щелкните этот значок и добавьте путь к папке, содержащей Eigen.
В моем случае путь:
потому что настоящей библиотекой Eigen является эта папка:
Шаг 13. Нажмите «ОК».

Шаг 14. Нажмите «Применить», а затем «ОК».

Шаг 15. Перейдите к файлу main.cpp (или как называется исходный код, который вы написали ранее).
Шаг 16. Скомпилируйте и запустите код.
Чтобы скомпилировать код, выберите «Сборка» -> «Сборка решения».
Затем, чтобы запустить код, выберите «Отладка» -> «Начать без отладки».
Вот что вы должны увидеть:

Вот оно! Все готово.
Последние публикации
Свяжитесь со мной в LinkedIn!
Моя цель — познакомиться со всеми, кто любит робототехнику. Свяжитесь со мной в LinkedIn, если вы нашли мою информацию полезной для себя. Также следите за моей страницей в LinkedIn, где я публикую интересный контент, связанный с робототехникой. Не стесняйтесь! Буду рад услышать от вас!
Как импортировать библиотеки в код VS?
Расширение кода Visual Studio: добавление внешних библиотек в проект в виде символических ссылок….Настройки расширения
- Открыть панель команд ( Shift+CMD+P в OSX или Shift+Ctrl+P в Windows и Linux).
- Найдите «Extlibraries: Добавить внешнюю библиотеку» и нажмите «Введение».
- Введите внешний каталог или путь к файлу.
- Введите имя и нажмите Intro.
Как связать библиотеку в Visual Studio?
Чтобы добавить . lib в качестве входных данных компоновщика в среде разработки
- Откройте диалоговое окно «Страницы свойств» проекта. Дополнительные сведения см. в разделе Настройка компилятора C++ и свойств сборки в Visual Studio.
- Выберите страницу свойств Input в папке Linker.
- Измените свойство Дополнительные зависимости, чтобы добавить файл . lib-файлы.
Как добавить библиотеку в проект?
Android Studio импортирует библиотеку в ваш проект и синхронизирует файлы Gradle. Шаг 4: Перейдите на вкладку зависимостей> нажмите кнопку «+» -> нажмите «Зависимость от модуля». Затем библиотечный модуль будет добавлен к зависимостям проекта.
Что такое библиотеки в Visual Studio?
Библиотека классов — это набор определений классов, содержащихся в файле . dll или .exe файл. Чтобы использовать библиотеку классов, вы должны сначала добавить ссылку на библиотеку (см. «Как добавить ссылки в ваш проект Visual Studio»).
Подходит ли Visual Studio для C++?
Microsoft Visual C++ (MSVC) относится к инструментам и библиотекам разработки на языках C++, C и ассемблере, доступным как часть Visual Studio для Windows. Visual Studio 2015, 2017 и 2019 можно установить параллельно.
В чем разница между кодом Visual Studio и Visual Studio?
Visual Studio – это набор инструментов разработки программного обеспечения на основе компонентов и других технологий для создания мощных и высокопроизводительных приложений. С другой стороны, код Visual Studio подробно описан как «Создание и отладка современных веб-приложений и облачных приложений Microsoft». Создавайте и отлаживайте современные веб-приложения и облачные приложения.
Как добавить библиотеку в Visual Studio 2015?
Как добавить класс в Visual Studio 2015?
Чтобы добавить класс в проект Visual Studio C++, в обозревателе решений щелкните проект правой кнопкой мыши, выберите «Добавить», а затем выберите «Класс». Откроется диалоговое окно «Добавить класс». При добавлении класса необходимо указать имя, отличное от уже существующих классов в MFC или ATL.
На каком языке написана DLL?
Файлы DLL используют такие языки, как C или C++, хотя C++ встречается чаще. Вы можете написать свои собственные библиотеки DLL для запуска нужного вам кода, если хотите научиться это делать. Это может быть полезно для вашего проекта и, конечно же, поможет вам хорошо выглядеть взамен.
Где сохранить файлы DLL в Visual Studio?
Можно ли использовать библиотеку динамической компоновки в Visual Studio?
Обычно для ресурсов программы используется динамическая библиотека. Мы можем использовать один файл DLL в нескольких программах. Теперь мы обсудим, как создать файл DLL в Visual Studio 2015 Preview.
Как добавить еще одну библиотеку в Visual Studio?
Добавить один каталог библиотеки для файлов *. lib: Перейдите к проекту (на верхней панели) -> свойства -> Свойства конфигурации -> Каталоги VC++ -> Каталоги библиотек, затем щелкните и отредактируйте и добавьте новую запись.
Как добавить дополнительные зависимости в Visual Studio?
Чтобы добавить . lib в качестве входных данных компоновщика в среде разработки
- Откройте диалоговое окно «Страницы свойств» проекта. Дополнительные сведения см. в разделе Настройка компилятора C++ и свойств сборки в Visual Studio.
- Выберите страницу свойств Input в папке Linker.
- Измените свойство Дополнительные зависимости, чтобы добавить файл . файлы библиотеки.
Где находится каталог VC++?
В Visual Studio 2008 это можно найти в разделе: Инструменты –> Параметры –> Проекты и решения –> Каталоги VC++.
Как добавить библиотеку в код VS?
Расширение кода Visual Studio: добавление внешних библиотек в проект в виде символических ссылок….Настройки расширения
- Открыть панель команд ( Shift+CMD+P в OSX или Shift+Ctrl+P в Windows и Linux).
- Найдите «Extlibraries: Добавить внешнюю библиотеку» и нажмите «Введение».
- Введите внешний каталог или путь к файлу.
- Введите имя и нажмите Intro.
Что такое компоновщик в Visual Studio?
Компоновщик (link.exe) объединяет объектные файлы в один исполняемый файл. Параметры компоновщика можно задать внутри или вне Visual Studio. В Visual Studio вы можете получить доступ к параметрам компоновщика, щелкнув правой кнопкой мыши узел проекта в обозревателе решений и выбрав Свойства, чтобы отобразить страницы свойств.
В чем разница между DLL и lib?
LIB и DLL LIB — это статическая библиотека, в которую можно помещать функции и процедуры и вызывать их во время компиляции приложения. DLL или динамическая библиотека выполняют ту же функцию, но являются динамическими в том смысле, что приложение может вызывать эти библиотеки во время выполнения, а не во время компиляции.
Как получить зависимости в коде VS?
Чтобы назначить зависимости проектам
- В обозревателе решений выберите проект.
- В меню «Проект» выберите «Зависимости проекта».
- На вкладке «Зависимости» выберите проект в раскрывающемся меню «Проект».
- В поле «Зависит от» установите флажок для любого другого проекта, который должен быть построен перед этим проектом.
В чем разница между зависимостями и ссылками в Visual Studio?
1 ответ. Единственная разница между «Ссылочным определением проекта» и «Определением зависимостей проекта» заключается в метаданных, которые определяют включение/исключение выходной сборки в/из основной команды связывания проекта.
Как добавить каталоги VC++ в VisualStudio 2019?
Щелкните правой кнопкой мыши узел проекта (не решение верхнего уровня) и выберите «Свойства», чтобы открыть диалоговое окно «Страницы свойств». Выберите Свойства конфигурации > страница свойств Каталоги VC++.
Как добавить дополнительные каталоги в VisualStudio 2019?
Добавление каталога Include Перейдите в диалоговое окно Страницы свойств проекта Visual Studio (в меню «Проект» выберите «Свойства» или щелкните проект правой кнопкой мыши в обозревателе решений). Выберите «Свойства конфигурации», «C/C++», «Общие», а затем добавьте $(PIXELINK_SDK_ROOT)\include в поле «Дополнительные включаемые каталоги».
Как добавить дополнительные библиотеки в Visual Studio?
Для Visual Studio вам нужно щелкнуть правой кнопкой мыши свой проект в обозревателе решений, а затем выбрать Свойства. Затем откройте свойства конфигурации, а затем компоновщик. Теперь вы хотите добавить папку, в которой у вас есть библиотеки Allegro, в Дополнительные каталоги библиотек, Linker -> Input, вы добавите фактические файлы библиотеки в Дополнительные зависимости.
Как установить библиотеку по умолчанию в Visual Studio?
Откройте диалоговое окно Страницы свойств проекта. Дополнительные сведения см. в разделе Настройка компилятора C++ и свойств сборки в Visual Studio. Выберите страницу свойств Configuration > Linker > Command Line. В разделе «Дополнительные параметры» введите параметр /DEFAULTLIB: библиотека для каждой библиотеки для поиска. Нажмите OK, чтобы сохранить изменения. См. Дополнительные параметры.
Как добавить дополнительный файл lib в VC++?
Используйте список «системных переменных», «Свойства конфигурации -> Каталоги VC++» и «Свойства конфигурации -> Компоновщик -> Общие»; вы можете правильно получить файл *.lib для проекта. И в этих методах вам нужно будет добавить файл *.lib в Дополнительные зависимости. Каталоги, указанные в переменной среды PATH.
Совместима ли библиотека CRT с Visual Studio 2015?
Все версии CRT поддерживают многопоточную разработку. Большинство библиотек поддерживают как статическую компоновку, чтобы напрямую связать библиотеку с вашим кодом, так и динамическую компоновку, чтобы ваш код мог использовать общие файлы DLL. Начиная с Visual Studio 2015, CRT преобразован в новые двоичные файлы.
В этом пошаговом руководстве показано, как создать статическую библиотеку (файл .lib) для использования с приложениями C++. Использование статической библиотеки — отличный способ повторного использования кода. Вместо повторной реализации одних и тех же подпрограмм в каждом приложении, требующем такой функциональности, вы пишете их один раз в статической библиотеке, а затем ссылаетесь на нее из приложений. Код, связанный со статической библиотекой, становится частью вашего приложения — вам не нужно устанавливать другой файл, чтобы использовать этот код.
Это пошаговое руководство охватывает следующие задачи:
Предпосылки
Понимание основ языка C++.
Создать проект статической библиотеки
Инструкции по созданию проекта зависят от вашей версии Visual Studio. Чтобы просмотреть документацию для предпочитаемой версии Visual Studio, используйте элемент управления выбора версии.Он находится в верхней части оглавления на этой странице.
Чтобы создать проект статической библиотеки в Visual Studio
В строке меню выберите «Файл» > «Создать» > «Проект», чтобы открыть диалоговое окно «Создать новый проект».
В верхней части диалогового окна установите для параметра «Язык» значение C++, для параметра «Платформа» выберите значение «Windows» и для параметра «Тип проекта» выберите значение «Библиотека».
В отфильтрованном списке типов проектов выберите Мастер рабочего стола Windows, а затем нажмите кнопку Далее.
На странице «Настройка нового проекта» введите MathLibrary в поле «Имя проекта», чтобы указать имя проекта. Введите StaticMath в поле Имя решения. Нажмите кнопку «Создать», чтобы открыть диалоговое окно «Проект рабочего стола Windows».
В диалоговом окне «Проект рабочего стола Windows» в разделе «Тип приложения» выберите «Статическая библиотека (.lib)».
В разделе Дополнительные параметры снимите флажок Предварительно скомпилированный заголовок, если он установлен. Установите флажок Пустой проект.
Нажмите «ОК», чтобы создать проект.
Чтобы создать проект статической библиотеки в Visual Studio 2017
В строке меню выберите «Файл» > «Создать» > «Проект».
В диалоговом окне «Новый проект» выберите «Установлено» > «Visual C++» > «Рабочий стол Windows». На центральной панели выберите Мастер рабочего стола Windows.
Укажите имя проекта, например MathLibrary, в поле Имя. Укажите имя решения, например StaticMath, в поле Имя решения. Нажмите кнопку ОК.
В диалоговом окне «Проект рабочего стола Windows» в разделе «Тип приложения» выберите «Статическая библиотека (.lib)».
В разделе «Дополнительные параметры» снимите флажок «Предварительно скомпилированный заголовок», если он установлен. Установите флажок Пустой проект.
Нажмите «ОК», чтобы создать проект.
Чтобы создать проект статической библиотеки в Visual Studio 2015
В строке меню выберите «Файл» > «Создать» > «Проект».
В диалоговом окне «Новый проект» выберите «Установлено» > «Шаблоны» > Visual C++ > Win32. На центральной панели выберите Консольное приложение Win32.
Укажите имя проекта, например MathLibrary, в поле Имя. Укажите имя решения, например StaticMath, в поле Имя решения. Нажмите кнопку ОК.
В мастере приложений 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.)
Создайте консольное приложение C++, которое ссылается на статическую библиотеку
Чтобы создать консольное приложение C++, которое ссылается на статическую библиотеку в Visual Studio
В обозревателе решений щелкните правой кнопкой мыши верхний узел Solution «StaticMath», чтобы открыть контекстное меню. Выберите «Добавить» > «Новый проект», чтобы открыть диалоговое окно «Добавить новый проект».
В верхней части диалогового окна установите для фильтра Тип проекта значение Консоль.
В отфильтрованном списке типов проектов выберите «Консольное приложение», затем нажмите «Далее». На следующей странице введите MathClient в поле Имя, чтобы указать имя проекта.
Нажмите кнопку «Создать», чтобы создать клиентский проект.
После создания консольного приложения для вас создается пустая программа. Имя исходного файла совпадает с именем, которое вы выбрали ранее. В примере он называется MathClient.cpp .
Чтобы создать консольное приложение C++, которое ссылается на статическую библиотеку в Visual Studio 2017
В обозревателе решений щелкните правой кнопкой мыши верхний узел Solution «StaticMath», чтобы открыть контекстное меню. Выберите «Добавить» > «Новый проект», чтобы открыть диалоговое окно «Добавить новый проект».
В диалоговом окне «Добавить новый проект» выберите Установлено > Visual C++ > Рабочий стол Windows. На центральной панели выберите Мастер рабочего стола Windows.
Укажите имя проекта, например MathClient, в поле Имя. Нажмите кнопку ОК.
В диалоговом окне «Проект рабочего стола Windows» в разделе «Тип приложения» выберите «Консольное приложение (.exe)».
В разделе «Дополнительные параметры» снимите флажок «Предварительно скомпилированный заголовок», если он установлен.
Нажмите «ОК», чтобы создать проект.
После создания консольного приложения для вас создается пустая программа. Имя исходного файла совпадает с именем, которое вы выбрали ранее. В примере он называется MathClient.cpp .
Чтобы создать консольное приложение C++, которое ссылается на статическую библиотеку в Visual Studio 2015
В обозревателе решений щелкните правой кнопкой мыши верхний узел Solution «StaticMath», чтобы открыть контекстное меню. Выберите «Добавить» > «Новый проект», чтобы открыть диалоговое окно «Добавить новый проект».
В диалоговом окне «Добавить новый проект» выберите Установлено > Visual C++ > Win32. На центральной панели выберите Консольное приложение Win32.
Укажите имя проекта, например MathClient, в поле Имя. Нажмите кнопку ОК.
В диалоговом окне мастера приложений Win32 нажмите «Далее».
На странице «Параметры приложения» в разделе «Тип приложения» убедитесь, что выбрано «Консольное приложение». В разделе «Дополнительные параметры» снимите флажок «Предварительно скомпилированный заголовок», затем установите флажок «Пустой проект». Нажмите «Готово», чтобы создать проект.
Чтобы добавить исходный файл в пустой проект, щелкните правой кнопкой мыши, чтобы открыть контекстное меню для проекта MathClient в обозревателе решений, а затем выберите «Добавить» > «Новый элемент».
В диалоговом окне «Добавить новый элемент» выберите Visual C++ > Код. В центральной панели выберите файл C++ (.cpp). Укажите имя исходного файла, например MathClient.cpp, а затем нажмите кнопку «Добавить». Отображается пустой исходный файл.
Используйте функциональность статической библиотеки в приложении
Чтобы использовать функции статической библиотеки в приложении
Прежде чем вы сможете использовать математические процедуры в статической библиотеке, вы должны сослаться на нее. Откройте контекстное меню проекта MathClient в обозревателе решений и выберите «Добавить» > «Ссылка».
В диалоговом окне «Добавить ссылку» перечислены библиотеки, на которые можно ссылаться. На вкладке «Проекты» перечислены проекты в текущем решении и все библиотеки, на которые они ссылаются. Откройте вкладку «Проекты», установите флажок MathLibrary и нажмите кнопку «ОК».
Чтобы сослаться на файл заголовка MathLibrary.h, необходимо изменить путь к включенным каталогам. В обозревателе решений щелкните правой кнопкой мыши MathClient, чтобы открыть контекстное меню. Выберите «Свойства», чтобы открыть диалоговое окно «Страницы свойств MathClient».
В диалоговом окне Страницы свойств MathClient выберите в раскрывающемся списке Конфигурация значение Все конфигурации. В раскрывающемся списке «Платформа» выберите «Все платформы».
Выберите страницу свойств Configuration > C/C++ > General. В свойстве Дополнительные включаемые каталоги укажите путь к каталогу MathLibrary или найдите его.
Чтобы найти путь к каталогу:
Откройте раскрывающийся список значений свойства «Дополнительные включаемые каталоги» и выберите «Изменить».
В диалоговом окне «Дополнительные включаемые каталоги» дважды щелкните верхнюю часть текстового поля. Затем нажмите кнопку с многоточием (. ) в конце строки.
В диалоговом окне «Выбор каталога» перейдите на уровень выше и выберите каталог MathLibrary. Затем нажмите кнопку «Выбрать папку», чтобы сохранить выбор.
В диалоговом окне «Дополнительные включаемые каталоги» нажмите кнопку «ОК».
В диалоговом окне «Страницы свойств» нажмите кнопку «ОК», чтобы сохранить изменения в проекте.
Зависимости в проектах C и C++ сложны. Создавать проекты C и C++ сложно, а поддерживать информацию о зависимостях внутри проектов C и C++ сложно.
Visual Studio C++ — это самая популярная интегрированная среда разработки и компилятор для платформ Microsoft Windows, широко используемая разработчиками C и C++. Очень часто разработчики вручную добавляют информацию в проект вручную в среде IDE, но этот метод трудно поддерживать с течением времени. К счастью, MSBuild, система сборки, используемая Visual Studio, позволяет определять файлы внешних пользовательских свойств (это XML-файлы), что представляет собой интересную точку расширения для автоматизации и стандартизации многих задач.
В этом сообщении представлен синтаксис Visual Studio.vcxproj и файлы свойств, а также то, как их можно использовать для систематического и масштабируемого определения зависимостей C++ от внешних библиотек.
Давайте начнем с того, что вручную добавим внешнюю библиотеку в один из существующих проектов. Давайте представим, что нам нужны некоторые возможности сжатия в нашем проекте, и мы хотим использовать для этой цели популярную библиотеку ZLib. Команда разработчиков может решить, что они поместят все свои зависимости в «C:\TeamDeps», и процесс добавления такой информации в наш проект обычно включает несколько шагов:
- Добавление включаемых каталогов, в которых можно найти такие заголовки, как zlib.h
- Добавление библиотек, которые необходимо связать, например zlib.lib
- Добавление каталогов библиотек, в которых можно найти эти библиотеки
- Добавление возможных определений препроцессора, которые могут потребоваться библиотеке для правильного поведения.
Все эти задачи можно выполнить в интерактивном режиме в среде IDE, перейдя в представление проекта, щелкните правой кнопкой мыши и откройте «Свойства». Для определения включаемых каталогов необходимо перейти в C/C++ -> Препроцессор -> Дополнительные включаемые каталоги:
Обратите внимание, что вся эта информация определяется для каждой конфигурации, в этом образе конфигурация Release — x64 изменяется. Если мы добавим каталоги include в эту конфигурацию, а затем переключимся на Debug в IDE, сборка не найдет заголовки ZLib. Поэтому необходимо добавлять включаемые каталоги, как правило, во все конфигурации.
Аналогичным образом библиотеки, которые связывает наше приложение, могут быть определены в Linker -> Input -> Additional Dependencies.
И, наконец, необходимы пути к библиотекам, это можно указать в Linker -> General. Как и указанные выше свойства, его также можно определить для нескольких конфигураций.
Этот процесс очень ручной, но мы можем проверить, как он транслируется в файлы проекта. Если мы проверим файл .vcxproj, то найдем что-то вроде этого:
Учитывая, что файлы .vcxproj являются XML-файлами, в них можно напрямую добавлять свойства. Тем не менее, файлы свойств предоставляют очень удобный способ сделать то же самое, сохраняя желаемую развязку и разделение задач в разработке программного обеспечения. Файлы свойств также представляют собой XML-файлы с расширением .props, которые в основном имеют тот же синтаксис, но могут быть импортированы из .vcxproj и даже других файлов свойств. Следуя принципу единой ответственности, мы создадим отдельные файлы свойств, предназначенные исключительно для обработки информации о зависимостях.
Для приведенного выше примера мы могли бы создать файл zlib.props, например:
И затем импортируйте его в файл .vcxproj. Этот импорт также можно добавить вручную в IDE, перейдя в «Диспетчер свойств» -> «Добавить существующий лист свойств», а затем перейдя и выбрав файл zlib.props. Но так как мы немного узнали, как выглядит .vcxproj, давайте сделаем это прямо в нем:
После того, как у нас есть эта настройка, добавить новую зависимость в проект очень просто, добавив новый файл xxxx.props и импортировав его в тот же раздел «Зависимости» в нашем .vcxproj, в одну строку.
Visual Studio C++ — это интегрированная среда разработки с несколькими конфигурациями. Это означает, что он может обрабатывать различные конфигурации сборки, такие как выпуск, отладка или архитектуры, такие как x64 или x86, в одном проекте без перезапуска, просто выбирая его в поле со списком.
Важно отметить, что в общем случае невозможно связать библиотеки, скомпилированные с другим типом сборки или архитектурой, в проект. Все библиотеки и исполняемые файлы, использующие их, должны быть собраны с одинаковым типом сборки и архитектурой. Если этого не сделать, наиболее типичной ошибкой будет ошибка ссылки, которая может выглядеть так:
Если мы хотим поддерживать и разрабатывать несколько конфигураций, как правило, для каждой конфигурации требуется как минимум отдельная библиотека. Существуют разные альтернативы, первый из которых будет использовать разные имена для библиотеки, например, zlibd.lib для отладочной, zlib.lib для выпуска и такие варианты, как zlib64d.lib для 64-битных. Второй вариант — сохранить то же имя библиотеки, но разместить ее в разных папках, например Release/x64 или Debug/Win32.
Чтобы позволить Visual Studio MSBuild использовать активные значения конфигурации, мы можем ввести условные обозначения для значений IDE «Конфигурация» и «Платформа» в нашем предыдущем файле zlib.props, например:
В зависимости от масштаба, количества зависимостей и управляемых конфигураций может быть интересно сделать еще один шаг и полностью отделить данные от функциональности. В этом случае это означало бы определить файл zlib.props, который импортирует определенный файл данных для одной конфигурации:
И каждый из файлов будет определять определенные переменные, например, zlib_release_x64.props будет:
Этот подход делает более очевидными важные значения, которые необходимо определить, а изменения и улучшения менее подвержены ошибкам.
Очень часто одна библиотека зависит от функциональности другой библиотеки. Например, популярный фреймворк Poco C++ зависит от ZLib (помимо других библиотек, таких как expat, sqlite и т. д.). В большинстве случаев, когда пользователь хочет создать приложение с использованием инфраструктуры Poco C++, он не хочет заботиться обо всех транзитивных зависимостях Poco и просто хочет указать в своем проекте свою зависимость от Poco, но не от другие транзитивные зависимости, такие как Zlib. Часто пользователи даже не подозревают об этих транзитивных зависимостях
Возможно реализовать эту логику в наших файлах свойств и внедрить в файл poco.props:
Обратите внимание на условие zlib_props_imported . Это флаг, который мы ввели, чтобы избежать повторного импорта одного и того же файла. Как такое могло произойти? Это то, что называется «ромбиком» на графике зависимостей. Если бы у нас была другая зависимость, такая как библиотека Boost, которая также зависит от ZLib, и мы хотим использовать в нашем проекте и Poco, и Boost, файл zlib.props был бы импортирован дважды.
Давайте на этом этапе повторим файлы, которые у нас уже есть:
- zlib.props: точка входа для библиотеки zlib. Он содержит условную логику, основанную на «конфигурации» и «платформе» Visual IDE для выбора одного из следующих файлов. Он также реализует «защиту импорта», чтобы избежать транзитивного включения более одного раза.
- zlib_release_x64.props : содержит конкретные данные о библиотеке zlib в ее выпуске, режиме x64, как ZLibLibraryDirectories , которые могут меняться в разных конфигурациях.
- zlib_debug_x64.props: то же, что и предыдущий, но для конфигурации отладки. Возможны и другие файлы конфигурации.
- poco.props : точка входа в библиотеку poco. Именно этот файл пользователи будут включать в свои файлы проектов .vcxproj. Он содержит транзитивную зависимость от zlib.props .
- poco_release_x64.props: специальные данные для библиотеки poco для выпуска, конфигурация x64.
- … другие файлы для каждой транзитивной зависимости и для каждой конфигурации.
Теперь, когда зависимости хорошо структурированы, у нас есть необходимая инфраструктура для дальнейшей автоматизации процесса. Это может быть очень полезно в нескольких случаях, например, при развитии зависимостей. Многим командам необходимо работать с несколькими проектами и разными версиями своих библиотек C++. Было бы относительно просто определить такой макет, как C:\TeamDeps\zlib\1.2.11 и C:\TeamDeps\zlib\1.2.8 . Каждый проект может определять свои версии и иметь некоторый сценарий для автоматизации создания различных файлов свойств.
Кроме того, возможно, существуют дополнительные конфигурации, которыми некоторым командам необходимо управлять для своих поставок, например необходимость управлять различными вариантами библиотеки. Очень типичным примером является связывание с разделяемыми и статическими библиотеками. Это также потребуется включить в макет зависимостей.
Наличие этой автоматизации было бы очень удобно для разработчиков, работающих над разными проектами, или для агентов сборки CI, которым нужна какая-то изоляция, а затем требуется использовать другой C:\TeamDeps для разных задач.
В этом репозитории Github есть проект C++ для Visual Studio 16 2019, реализующий приложение, которое может загружать изображение из Интернета, используя некоторые функции из библиотеки Poco, обрабатывать его с помощью библиотеки OpenCV и отображать с помощью графического интерфейса ImGui. пользовательский интерфейс, визуализирующий его с помощью GLFW. Все эти библиотеки, в свою очередь, имеют несколько транзитивных зависимостей.
Мы могли бы вручную загрузить их и собрать из исходников, поместить в папку, например, «C:\TeamDeps», а затем записать файлы свойств. Менеджер пакетов Conan C++ может автоматизировать это для нас, управляя загрузкой пакетов из центрального репозитория пакетов с открытым исходным кодом ConanCenter, установкой их в кэш Conan, чтобы они никоим образом не загрязняли и не изменяли систему, и, наконец, используя Генератор MSBuildDeps автоматически генерирует из графа зависимостей все файлы свойств для нашего проекта.
Первым шагом является установка зависимостей (прочитайте файл conanfile.py, если хотите проверить, как там указаны версии зависимостей):
Эта команда загрузит и установит все наши зависимости из ConanCenter и транзитивные зависимости (27 из них). Граф зависимостей можно создать с помощью $ conan info .. —graph=graph.html, а затем открыть файл graph.html:
После команды $conan install перейдите в папку conan и проверьте там все сгенерированные файлы .props.
После того, как зависимости установлены и файлы свойств добавлены в проект (это нужно сделать только один раз, проект в репозитории Github уже добавил файлы свойств, ничего делать не нужно), можно построить и запустить проект. Не забудьте выбрать «Release» и «x64», так как это конфигурация по умолчанию, которая будет установлена с помощью conan install.
Использование файлов свойств — это удобный и структурированный способ управления информацией о зависимостях в проектах Visual Studio C++. Они могут быть очень систематически организованы для масштабирования до любого количества зависимостей, управления транзитивными зависимостями и несколькими конфигурациями (выпуск/отладка, x64/x86).
Читайте также:
- Как записать электрогитару в Adobe Audition
- Как добавить подпись в Outlook 365
- Программа V380 для Android
- Обновление драйвера Intel UHD Graphics 605
- Как сделать автодополнение в таблице в word
Установка поддержки Python в Visual Studio
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
Поддержка Python доступна только в Visual Studio для Windows. В Mac и Linux поддержка Python доступна через Visual Studio Code.
Скачивание & рабочей нагрузки Python
- Скачайте и запустите последнюю версию Visual Studio Installer для Windows. Поддержка Python доступна в выпуске 15.2 и выше. Если вы уже установили Visual Studio, откройте этот продукт и запустите установщик, выбрав Сервис>Получить средства и компоненты.
Совет Выпуск Community предназначен для индивидуальных разработчиков, использования при аудиторном обучении и в научных исследованиях, а также разработки решений с открытым кодом. Если программу планируется использовать в других целях, установите Visual Studio Professional или Visual Studio Enterprise.
Установщик предоставляет список рабочих нагрузок, которые представляют собой группы связанных параметров для конкретных областей разработки. Для Python выберите рабочую нагрузку Разработка на Python и нажмите Установить. 
| Параметры установки Python | Description |
|---|---|
| Дистрибутивы Python | Выберите любое сочетание доступных дистрибутивов 32- и 64-разрядных версий Python 2, Python 3, Miniconda, Anaconda2 и Anaconda3, с которыми вы планируете работать. Каждый дистрибутив включает в себя интерпретатор, среду выполнения и библиотеки. В частности, Anaconda — это открытая платформа обработки и анализа данных, которая включает в себя множество предварительно установленных пакетов. Visual Studio автоматически определяет существующие установки Python. См. Окно «Окружения Python». Кроме того, если доступна более новая версия Python, чем показанная в установщике, то вы можете установить эту версию отдельно, и Visual Studio обнаружит ее. |
| Поддержка шаблонов Cookiecutter | Устанавливает графический пользовательский интерфейс Cookiecutter для поиска шаблонов, ввода их параметров и создания проектов и файлов. См. раздел Использование расширения Cookiecutter. |
| Поддержка веб-приложений Python | Устанавливает средства для разработки веб-приложений, включая поддержку редактирования кода HTML, CSS и JavaScript, а также шаблоны проектов на основе платформ Bottle, Flask и Django. См. статью Шаблоны веб-проектов Python. |
| Встроенные средства разработки Python | Устанавливает компилятор C++ и другие компоненты, необходимые для разработки собственных расширений для Python. См. статью Создание расширения C++ для Python. Чтобы обеспечить полную поддержку С++, установите рабочую нагрузку Разработка классических приложений на C++. |
По умолчанию рабочая нагрузка Python устанавливается для всех пользователей на компьютере:
*%ProgramFiles%\Microsoft Visual Studio\\\\Common7\IDE\Extensions\Microsoft\Python*
где
*%ProgramFiles(x86)%\Microsoft Visual Studio\\\\Common7\IDE\Extensions\Microsoft\Python*
где
Проверка установки
Чтобы быстро протестировать поддержку Python, выполните следующие действия.
- Запустите Visual Studio.
- Нажмите клавиши ALT+, чтобы открыть интерактивное окно Python и ввести 2+2 его. Если вы не увидите результат 4, проверьте выполненные действия.


Следующие шаги
- Шаг 1. Создание проекта Python
- Определение существующего интерпретатора Python вручную
