Файлы стандартной библиотеки C++ и C++ (STL) .lib
В этой статье перечислены файлы библиотеки .lib среды выполнения Microsoft C, которые можно связать с приложением при разработке приложения, а также связанные с ними параметры компилятора и директивы препроцессора.
Дополнительные сведения о развертывании файлов среды выполнения C, необходимых для поддержки приложения, см. в статье о распространении файлов среды выполнения Visual C++.
Ознакомьтесь со ссылкой на библиотеку среды выполнения C, если вы ищете справочник по API для библиотеки среды выполнения C.
Реализация стандартной библиотеки C++ майкрософт часто называется библиотекой шаблонов STL или Standard. Хотя стандартная библиотека C++ является официальным именем библиотеки , как определено в ISO 14882, из-за популярного использования STL и «Стандартной библиотеки шаблонов» в поисковых системах, мы иногда используем эти имена, чтобы упростить поиск нашей документации.
С исторической точки зрения , «STL» первоначально ссылается на стандартную библиотеку шаблонов, написанную Александром Стефановым. Части этой библиотеки были стандартизированы в стандартной библиотеке C++. Стандартная библиотека также включает библиотеку среды выполнения ISO C, части библиотеки Boost и другие функции. Иногда «STL» используется для ссылки на контейнеры и алгоритмы стандартной библиотеки C++, адаптированной из STL Стефанова. В этой документации стандартная библиотека шаблонов (STL) ссылается на стандартную библиотеку C++ в целом.
Файлы среды выполнения .lib C
Стандартная библиотека ISO C является частью стандартной библиотеки C++. Библиотеки Visual C++, которые реализуют CRT, поддерживают разработку с использованием машинного кода, а также сочетания машинного и управляемого кода. Все версии библиотек CRT поддерживают разработку многопоточного кода. Большинство библиотек поддерживает как статическое связывание (для связывания библиотеки непосредственно в коде), так и динамическое связывание (для использования в коде общих библиотек DLL).
В Visual Studio 2015 CRT был рефакторингован в новые двоичные файлы. Универсальная библиотека CRT (UCRT) содержит функции и глобальные переменные, экспортируемые стандартной библиотекой CRT C99. UCRT теперь является компонентом Windows и поставляется в составе Windows 10 и более поздних версий. Статическая библиотека, библиотека импорта DLL и файлы заголовков для UCRT теперь находятся в пакете SDK для Windows. При установке Visual C++программа установки Visual Studio устанавливает подмножество пакета SDK для Windows, необходимое для использования UCRT. Библиотеку UCRT можно использовать в любой версии Windows, поддерживаемой Visual Studio 2015 и более поздними версиями. Его можно распространить с помощью vcredist для поддерживаемых версий Windows, отличных от Windows 10 или более поздней версии. Дополнительные сведения см. в разделе Распространение файлов Visual C++.
В следующей таблице перечислены библиотеки, которые реализуют UCRT.
Библиотека | Связанная DLL | Характеристики | Параметр | Директивы препроцессора |
---|---|---|---|---|
libucrt.lib | None | Статически связывает UCRT в коде. | /MT | _MT |
libucrtd.lib | None | Отладочная версия UCRT для статического связывания. Нераспространяемый компонент. | /MTd | _DEBUG , _MT |
ucrt.lib | ucrtbase.dll | DLL-библиотека импорта для UCRT. | /MD | _MT , _DLL |
ucrtd.lib | ucrtbased.dll | DLL-библиотека импорта для отладочной версии UCRT. Нераспространяемый компонент. | /MDd | _DEBUG , _MT , _DLL |
Библиотека vcruntime содержит код реализации Visual C++ CRT: обработку исключений и поддержку отладки проверка, сведения о типе и сведения о типе, сведения о реализации и некоторые расширенные функции библиотеки. Версия библиотеки vcruntime должна соответствовать используемой версии компилятора.
В этой таблице перечислены библиотеки, которые реализуют библиотеку vcruntime.
Библиотека | Связанная DLL | Характеристики | Параметр | Директивы препроцессора |
---|---|---|---|---|
libvcruntime.lib | None | Статически связанная с кодом. | /MT | _MT |
libvcruntimed.lib | None | Отладочная версия для статического связывания. Нераспространяемый компонент. | /MTd | _MT , _DEBUG |
vcruntime.lib | vcruntime.dll | DLL-библиотека импорта для vcruntime. | /MD | _MT , _DLL |
vcruntimed.lib | vcruntimed.dll | DLL-библиотека импорта для отладочной версии vcruntime. Нераспространяемый компонент. | /MDd | _DEBUG , _MT , _DLL |
При рефакторинге UCRT функции среды выполнения параллелизма были перемещены в concrt140.dll распространяемый пакет C++. Эта библиотека DLL необходима для параллельных контейнеров и алгоритмов C++, таких как concurrency::parallel_for . Кроме того, стандартная библиотека C++ требует, чтобы эта библиотека DLL в Windows XP поддерживала примитивы синхронизации, так как Windows XP не имеет переменных условий.
Код, инициализирующий CRT, находится в одной из нескольких библиотек в зависимости от статического или динамического связывания библиотеки CRT и использования машинного, управляемого или смешанного кода. Этот код обрабатывает запуск, инициализацию внутренних данных потоков и завершение CRT. Это зависит от используемой версии компилятора. Эта библиотека всегда статически связана, даже при использовании динамически связанной библиотеки UCRT.
В этой таблице перечислены библиотеки, которые реализуют инициализацию и завершение CRT.
Библиотека | Характеристики | Параметр | Директивы препроцессора |
---|---|---|---|
libcmt.lib | Статически связывает в коде запуск CRT машинного кода. | /MT | _MT |
libcmtd.lib | Статически связывает отладочную версию запуска CRT в машинном коде. Нераспространяемый компонент. | /MTd | _DEBUG , _MT |
msvcrt.lib | Статическая библиотека для запуска CRT в машинном коде для использования с DLL, UCRT и vcruntime. | /MD | _MT , _DLL |
msvcrtd.lib | Статическая библиотека для запуска отладочной версии CRT в машинном коде для использования с DLL, UCRT и vcruntime. Нераспространяемый компонент. | /MDd | _DEBUG , _MT , _DLL |
msvcmrt.lib | Статическая библиотека для запуска CRT в смешанном машинном и управляемом коде для использования с DLL, UCRT и vcruntime. | /clr | |
msvcmrtd.lib | Статическая библиотека для запуска отладочной версии CRT в смешанном машинном и управляемом коде для использования с DLL, UCRT и vcruntime. Нераспространяемый компонент. | /clr | |
msvcurt.lib | Нерекомендуемая статическая библиотека для CRT с полностью управляемым кодом. | /clr:pure | |
msvcurtd.lib | Нерекомендуемая статическая библиотека для отладочной версии CRT с полностью управляемым кодом. Нераспространяемый компонент. | /clr:pure |
Если вы связываете программу из командной строки без параметра компилятора, указывающего библиотеку среды выполнения C, компоновщик будет использовать статически связанные библиотеки CRT: libcmt.lib и libvcruntime.lib libucrt.lib .
Использование статически скомпонованных CRT означает, что все сведения о состоянии, сохраненные библиотекой времени выполнения C, будут локальны по отношению к этому экземпляру CRT. Например, если вы используете strtok статически связанный CRT, позиция strtok средства синтаксического анализа не связана с strtok состоянием, используемым в коде в одном процессе (но в другом библиотеке DLL или EXE), связанном с другим экземпляром статического CRT. Напротив, динамически скомпонованная библиотека CRT позволяет использовать состояние всему коду в процессе, который динамически скомпонован с этой библиотекой CRT. Эта проблема не применяется, если вы используете новые более безопасные версии этих функций; Например, strtok_s эта проблема не возникает.
Так как библиотека DLL, созданная путем связывания со статическим CRT, имеет собственное состояние CRT, мы не рекомендуем связывать статически с CRT в библиотеке DLL, если только последствия не понятны и не нужны. Например, если вы вызываете _set_se_translator исполняемый файл, который загружает библиотеку DLL, связанную с собственной статической CRT, все исключения оборудования, созданные кодом в библиотеке DLL, не будут пойманы переводчиком, но аппаратные исключения, созданные кодом в основном исполняемом файле, будут пойманы.
Если вы используете параметр компилятора /clr , код будет связан со статической библиотекой. msvcmrt.lib Эта статическая библиотека предоставляет функцию прокси между управляемым кодом и неуправляемой средой CRT. Вы не можете использовать статически связанный CRT ( /MT или /MTd параметры) с /clr . Вместо этого используйте динамически связанные библиотеки ( /MD или /MDd ) . Полностью управляемые библиотеки CRT отмечены как нерекомендуемые для использования в Visual Studio 2015 и не поддерживаются в Visual Studio 2017.
Дополнительные сведения об использовании CRT с /clr , см. в смешанных (собственных и управляемых) сборках.
Чтобы создать отладочную версию приложения, необходимо определить флаг, _DEBUG и приложение должно быть связано с отладочной версией одной из этих библиотек. Дополнительные сведения об использовании отладочных версий файлов библиотек см . в методах отладки CRT.
Эта версия CRT не полностью соответствует стандарту C99. В версиях до Visual Studio 2019 версии 16.8 заголовок не поддерживается. Во всех версиях макросы CX_LIMITED_RANGE и FP_CONTRACT pragma не поддерживаются. Некоторые элементы, такие как значения спецификаторов параметров в стандартных функциях ввода-вывода, по умолчанию используют интерпретации прежних версий. Вы можете использовать /Zc параметры соответствия компилятора и указать параметры компоновщика для управления некоторыми аспектами соответствия библиотеки.
Файлы стандартной библиотеки C++ (STL) .lib
Стандартная библиотека C++ | Характеристики | Параметр | Директивы препроцессора |
---|---|---|---|
libcpmt.lib | Многопоточная, статическая компоновка. | /MT | _MT |
msvcprt.lib | Многопоточный динамический канал (библиотека импорта для msvcp.dll ) | /MD | _MT , _DLL |
libcpmtd.lib | Многопоточная, статическая компоновка. | /MTd | _DEBUG , _MT |
msvcprtd.lib | Многопоточный динамический канал (библиотека импорта для msvcpd.dll ) | /MDd | _DEBUG , _MT , _DLL |
При сборке версии выпуска проекта одна из базовых библиотек среды выполнения C ( libcmt.lib , , msvcmrt.lib ) msvcrt.lib связана по умолчанию в зависимости от выбранного параметра компилятора (многопоточный, DLL, /clr ). Если в код включен один из файлов заголовков стандартной библиотеки C++, стандартная библиотека C++ будет автоматически связана visual C++ во время компиляции. Например:
#include
Для совместимости на уровне двоичного кода одна библиотека импорта может задавать несколько DLL-файлов. Обновления версий могут ввести библиотеки dot — отдельные DLL-файлы, которые вводят новые функции библиотеки. Например, Visual Studio 2017 версии 15.6, представленная msvcp140_1.dll для поддержки более стандартных функций библиотеки без нарушения двоичного интерфейса приложения (ABI), поддерживаемого msvcp140.dll . Библиотека импорта, включенная msvcprt.lib в набор инструментов для Visual Studio 2017 версии 15.6, поддерживает как библиотеки DLL, так и vcredist для этой версии устанавливает обе библиотеки DLL. После доставки библиотека dot имеет фиксированный ABI и никогда не будет зависеть от библиотеки dot более поздней версии.
Если приложение использует несколько версий CRT, с какими проблемами можно столкнуться?
С каждым исполняемым образом (EXE или DLL) может статически связываться собственная библиотека CRT. В образе может создаваться динамическая ссылка на CRT. Версия CRT статически включена или динамически загружается в зависимости от версии средств и библиотек, в которой она был создана. В рамках одного процесса может загружаться несколько образов EXE и DLL, каждый с собственной библиотекой CRT. Распределители, внутренние структуры макета и варианты организации хранилища для этих CRT могут быть разными. Это означает, что выделенная память, ресурсы CRT или классы, передаваемые через границу DLL, могут привести к проблемам в управлении памятью, внутреннем статическом использовании или интерпретации макета. Например, если класс выделен в одной библиотеке DLL, но передан в другую и удален, какой используется метод освобождения CRT? Ошибки, вызванные, могут варьироваться от тонкого до немедленного неустранимого, и поэтому не рекомендуется напрямую передавать такие ресурсы.
Вместо этого можно избежать многих этих проблем с помощью технологий двоичного интерфейса приложения (ABI), так как они предназначены для обеспечения стабильной и версии. Разрабатывайте ваши интерфейсы экспорта DLL для передачи информации в виде значения или для работы в памяти, которая передается вызывающим объектом, а не в локально выделенной памяти, которая возвращается вызывающей стороне. Используйте методы маршалинга для копирования структурированных данных между исполняемыми изображениями. Инкапсулируйте ресурсы локально и допускайте действия только через дескрипторы или функции, которые вы предоставляете клиентам.
Кроме того, вы можете избежать некоторых из этих проблем, если для всех образов в процессе будет использоваться одна и та же версия динамически загружаемой библиотеки CRT. Чтобы все компоненты использовали одну и ту же версию библиотеки DLL CRT, создайте их с помощью /MD параметра и используйте один набор инструментов компилятора и параметры свойств.
Будьте осторожны, если программа передает определенные ресурсы CRT через границы DLL. Такие ресурсы, как дескрипторы файлов, языковые стандарта и переменные среды, могут вызвать проблемы, даже если используется та же версия CRT. Дополнительные сведения о проблемах, связанных с ними и их устранении, см. в статье о потенциальных ошибках передачи объектов CRT через границы библиотеки DLL.
Где находится microsoft visual c на windows 10
Перейдите на веб-сайт Майкрософт и введите Visual C++ распространяемый пакет в поле поиска. Go to the Microsoft website and enter Visual C++ Redistributable in the search box.
Как найти Visual Studio на компьютере?
В Windows 8, 8.1 или 10 значок приложения Visual Studio 2015 можно найти в группе V. Если вы по-прежнему не можете найти значок, воспользуйтесь поиском Windows (нажмите клавишу Windows, затем введите “Visual Studio 2015”).
Куда устанавливается программа Microsoft Visual C++?
По умолчанию устанавливается в Program Files.
Для чего нужна программа Microsoft Visual C++?
Где находятся библиотеки C++?
Как запустить Visual Studio C++?
Если вы используете Visual Studio 2019 (или более новую версию), то не нужно писать эту строку вообще. Чтобы запустить программу в Visual Studio, нажмите комбинацию Ctrl+F5 .
Где находится Visual Studio Installer?
Как найти файл Visual Studio?
Вы можете найти его под C:Program Files (x86)Microsoft Visual Studio2017ProfessionalCommon7IDEdevenv.exe .
NET Core cross-platform development workload, and then choose Modify.
Как удалить с компьютера Microsoft Visual C++?
Удаление Visual Studio с помощью стандартного метода удаления
- В панели управления на странице Программы и компоненты выберите выпуск продукта, который требуется удалить, и нажмите кнопку Изменить.
- В мастере установки выберите Удалить, нажмите кнопку Да, а затем следуйте инструкциям мастера.
Как узнать есть ли у меня Visual C++?
Как узнать версию пакета Microsoft Visual C++, установленного в операционной системе? Просто есть станция, доступ к которой только из-под учётки пользователя, и в ней не запускается игра . silalex, Пуск -> Панель управления -> Установка и удаление программ -> там отображаются.
Куда устанавливается VS Code?
Можно ли удалить программу Microsoft Visual C++?
Можно ли удалить Microsoft Visual C++ Redistributable
Если вкратце, то да, можно. Но не нужно. Вы вряд ли сможете узнать, какому приложений понадобится та или иная версия Visual C++. Когда вы удаляете программу, установленные ею наборы остаются в системе, поскольку они могут быть необходимы другим приложениям.
Нужно ли удалять старые версии Microsoft Visual C++?
По поводу старых версии Visual C++, не стоит их удолять до тех пор пока вы используете программыигрыприложения работающие на базе и библиотеках Visual C++ 200* версий. В противном случае они могут перестать работать корректно или вообще перестанут загружаться.
Что такое Microsoft Visual C++?
Я установил Visual Studio 2015 Express, но нигде не могу найти значок ярлыка. Он также не отображается в меню «Пуск» приложения или через поиск. Я тоже ничего не вижу в папке C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE
Мне нужен исполняемый файл для создания ярлыка, а не имя для запуска через командную строку «Выполнить».
Если исполняемого файла нет, убедитесь, что вы установили его. Похоже, вы установили его, но произошла ошибка, и установка была отменена. Попробуйте снова запустить установщик и посмотрите, сообщает ли он, что он установлен, и хочет, чтобы вы изменили текущую установку, или он будет выполнять новую установку (в этом случае он просто не установлен). как насчет C:\Program Files\Microsoft Visual Studio 14.0\Common7\IDE ? Какую версию Express 2015 вы установили? Есть Express для рабочего стола, веб или Windows. Оказывается, это было установлено в C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\VWDExpress.exe , я никогда ничего не менял во время установки . странно, что это не в C:\Program Files @Flo — это не C:\Program Files потому, что Visual Studio 2015 НЕ является 64-битной программой. Сам процесс, который запускается при запуске, является 32-битным процессом. Вот вопрос Stackoverflow от 2010 года с ответами некоторых очень умных людей, один из которых даже ссылается на обоснование отсутствия 64-битной IDE. , Если он изменился (я не проверял) в течение 5 лет, я не знаю, я могу просто сказать, где он установлен, у вас есть 32-битная установка
Он должен быть там, где вы выбрали каталог установки. Я только что запустил установку, и это было местоположение по умолчанию.
C:\Program Files (x86)\Microsoft Visual Studio 14.0
Чтобы быть уверенным, я установил все 3 версии Visual Studio Express 2015. Вот их исполняемые файлы.
- Экспресс 2015 для рабочего стола = VSWinExpress.exe
- Экспресс 2015 для веб = VWDExpress.exe
- Экспресс 2015 для Windows = WDExpress.exe
Все они расположены в C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE каталоге.
Пожалуйста, введите команду devenv из программы запуска, она запустит установленную Visual Studio.
Я также столкнулся с точно такой же проблемой после установки VS 2015 на моем компьютере с Win 7. Но перед установкой я удалил все предыдущие версии VS, поэтому devenv запустил самую обновленную VS, которая является VS 2015.
Надеюсь, что это надежда.
Объяснение можно найти здесь .
Значок или ярлык приложения Visual Studio больше не отображаются в папке VS.
- В Windows 7 его можно найти в верхней части списка «Все программы» в меню «Пуск».
- В Windows 8, 8.1 и 10 он должен появиться в группе «V» в меню.
Простой способ найти его: выберите решение проекта -> открыть с помощью -> в раскрывающемся списке, вы, вероятно, найдете версию vs exe, которую хотите найти. Затем откройте диспетчер задач и найдите местоположение исполняемого файла VS, который вы используете в данный момент. Там вы идете 🙂
Работает для меня. Для пояснения: Запустите программу, в которой вы хотите узнать местоположение, в данном случае Visual Studio 2015 Express. Неважно, КАК вы запускаете его, пока он работает. Затем запустите диспетчер задач, щелкните правой кнопкой мыши программу, выберите «Открыть файл». (В Windows 10 — точные шаги могут отличаться в других версиях Windows.)
У вас могут быть проблемы с тем, что Windows 10 может обрабатывать только 512 установленных приложений в своем меню «Пуск». Выполните поиск «Приложения для Windows 10 512», и вы найдете много дискуссий о проблеме. Чтобы узнать, сколько у вас приложений — запустите Windows Powershell и введите команду «Get-StartApps | measure».
Здесь вы сможете скачать распространяемый пакет майкрософт визуал ++ 2005, 2008, 2010, 2012, 2013, 2015, 2017, 2019 x64 x86 (64 -32 бит) все версии включая самые последние.
Microsoft Visual C ++ необходим для установки и работы программ и игр разработанных на этой платформе.
Выберите какой хотите скачать Visual C:
Ответы на популярные вопросы — FAQ
Как установиить Microsoft Visual C
Если у вас Windows 64 битная (x64), то для установки Microsoft Visual C вам необходимо скачать оба файла 32 бит и 64 бит, извлечь файлы из архивов vcredist x86 и vcredist x64, далее запустить и установить последовательно. Если у вас Windows 32 битной версии (x86), то для установки Microsoft Visual C ++ скачайте только 32 бит, извлеките файл vcredist x86 и запустите его последовательно нажимая далее.
Нужно ли удалять старые версии Microsoft Visual C
Нет не нужно, так как при установке Microsoft Visual C++ сам удаляет старые версии и вместо них устанавливает новые.
Как открыть Microsoft Visual C
Microsoft Visual C нельзя открыть это не обычная программа а набор библиотек файлов и пакетов для работы различных программ и игр. Поесть вы не найдете ярлыка или файла запуска.
Устанавливаю Microsoft Visual C но программы не запускаются
Попробуйте полностью удалить все версии Microsoft Visual C через панель Установки и удаления программ и установите все версии по отдельности, начиная с 2005 по 2019.
Не удаляется Microsoft Visual C
Какую версию удалять Microsoft Visual C если ошибка при запуске программы
Если вы не знаете наверняка какая версия Microsoft Visual C повреждена то попробуйте поочередно устанавливать все версии начиная с 2005
Какой версии Microsoft Visual C не хватает
Для того чтобы понять какой версии не хватает для работы программы или игры, зайдите в Панель управления- Установка и удаление программ и посмотрите какие версии уже установлены и каких нет. Доустановите те версии которых нет в списке установленных программ.
Ошибка при установке Microsoft Visual C
Что за программа Microsoft Visual C++
Microsoft Visual C++ распространяемый пакет ( redistributable package) — это специальная программа, позволяющая запускать программы и игры на компьютере разработанные на языке программирования языке C++ в среде Visual Studio. Другими словами Visual ++ это набор пакетов с данными, которые используют программы при работе на компьютере. Соответственно, когда программа или гра не находит нужный пакет, то появляется ошибка.
На сайте вы сможете скачать распространяемый пакет (redistributable package) в зависимости от версии (пакета) по отдельности: 2005 2008 2010 2012 2013 2015 2017 2019 x64 x86.
Также можно скачать все версии одним файлом, что позволит быстро установить Visual C++ запустив на установку один файл, который установит все версии Microsoft Visual C++.
При установке данного пакета, все имеющиеся версии будут переустановлены, а не имеющиеся доустановлены. Что позволит не устанавливать каждый пакет по отдельности, а также избежать разных ошибок при установке по отдельности.
Сюда входят оба пакета как 32 так и 64 битная .
Microsoft Visual С 2005
Поддерживаемая операционная система
- 32-разрядная (x86)
- 64-разрядная (x64, WOW)
- ARM
Windows 10; Windows 7 Service Pack 1; Windows 8; Windows 8.1; Windows Server 2003 Service Pack 2; Windows Server 2008 R2 SP1; Windows Server 2008 Service Pack 2; Windows Server 2012; Windows Vista Service Pack 2; Windows XP Service Pack 3
Если у вас Windows 64 битная, то необходимо устанавливать оба пакета как 32 так и 64 битную.
Если у вас Windows 32 битная, то необходимо устанавливать только 32 битную
Microsoft Visual С 2008
Поддерживаемая операционная система
- 32-разрядная (x86)
- 64-разрядная (x64, WOW)
- ARM
Windows 10; Windows 7 Service Pack 1; Windows 8; Windows 8.1; Windows Server 2003 Service Pack 2; Windows Server 2008 R2 SP1; Windows Server 2008 Service Pack 2; Windows Server 2012; Windows Vista Service Pack 2; Windows XP Service Pack 3
Если у вас Windows 64 битная, то необходимо устанавливать оба пакета как 32 так и 64 битную.
Если у вас Windows 32 битная, то необходимо устанавливать только 32 битную
Microsoft Visual С 2010
Поддерживаемая операционная система
- 32-разрядная (x86)
- 64-разрядная (x64, WOW)
- ARM
Windows 7; Windows Server 2003 R2 (32-Bit x86); Windows Server 2003 Service Pack 2; Windows Server 2008 R2; Windows Server 2008 Service Pack 2; Windows Vista Service Pack 2; Windows XP Service Pack 3
Если у вас Windows 32 битная, то необходимо устанавливать только 32 битную
Если у вас Windows 64 битная, то необходимо устанавливать оба пакета как 32 так и 64 битную .
Microsoft Visual С 2012
Поддерживаемая операционная система
- 32-разрядная (x86)
- 64-разрядная (x64, WOW)
- ARM
Windows 7 Service Pack 1; Windows 8; Windows 8.1; Windows Server 2003; Windows Server 2008 R2 SP1; Windows Server 2008 Service Pack 2; Windows Server 2012; Windows Vista Service Pack 2; Windows XP
Если у вас Windows 32 битная, то необходимо устанавливать только 32 битную
Если у вас Windows 64 битная, то необходимо устанавливать оба пакета как 32 так и 64 битную .
Microsoft Visual С 2013
Поддерживаемая операционная система
- 32-разрядная (x86)
- 64-разрядная (x64, WOW)
- ARM
Windows 7 Service Pack 1; Windows 8; Windows 8.1; Windows Server 2003; Windows Server 2008 R2 SP1; Windows Server 2008 Service Pack 2; Windows Server 2012; Windows Vista Service Pack 2; Windows XP
Если у вас Windows 32 битная, то необходимо устанавливать только 32 битную
Если у вас Windows 64 битная, то необходимо устанавливать оба пакета как 32 так и 64 битную .
Microsoft Visual С 2015
Поддерживаемая операционная система
- 32-разрядная (x86)
- 64-разрядная (x64, WOW)
- ARM
Windows 10; Windows 7 Service Pack 1; Windows 8; Windows 8.1; Windows Server 2003 Service Pack 2; Windows Server 2008 R2 SP1; Windows Server 2008 Service Pack 2; Windows Server 2012; Windows Vista Service Pack 2; Windows XP Service Pack 3
Если у вас Windows 32 битная, то необходимо устанавливать только 32 битную
Если у вас Windows 64 битная, то необходимо устанавливать оба пакета как 32 так и 64 битную .
Microsoft Visual С 2017
Поддерживаемая операционная система
- 32-разрядная (x86)
- 64-разрядная (x64, WOW)
- ARM
Windows 10; Windows 7 Service Pack 1; Windows 8; Windows 8.1; Windows Server 2003 Service Pack 2; Windows Server 2008 R2 SP1; Windows Server 2008 Service Pack 2; Windows Server 2012; Windows Vista Service Pack 2; Windows XP Service Pack 3
Если у вас Windows 32 битная, то необходимо устанавливать только 32 битную
Если у вас Windows 64 битная, то необходимо устанавливать оба пакета как 32 так и 64 битную .
Microsoft Visual С 2019
Пакет Microsoft Visual C ++ 2019 включает в себя пакеты 2015, 2017, 2019. При установке данного пакета, установленные пакеты 2015 или 2017 будут заменены.
Поддерживаемая операционная система
- 32-разрядная (x86)
- 64-разрядная (x64, WOW)
- ARM
Windows 10; Windows 7 Service Pack 1; Windows 8; Windows 8.1
Если у вас Windows 32 битная, то необходимо устанавливать только 32 битную
Если у вас Windows 64 битная, то необходимо устанавливать оба пакета как 32 так и 64 битную .
Ошибки при установке Microsoft Visual C++
При установке Visual C++ могут встречаться разные ошибки. Рассмотрим способы их устранения
Практически любой активный геймер, предпочитающий запускать более-менее современные игры, сталкивался с необходимостью установки Microsoft Visual C Redistributable. Этот программный пакет очень важен, так как большая часть игр последних лет без него просто откажутся запускаться.
Что такое Microsoft Visual C++ Redistributable?
Redistributable пакет из коробки
Как правило, с установкой никаких проблем не возникает. Все крупные сервисы цифровой дистрибуции игр, будь то Steam, Origin, Uplay и их аналоги, всегда заботятся о поддержке игроков. Например, в Steam DirectX, Microsoft Visual C++ Redistributable и другой нужный для запуска той или иной игры софт ставится автоматически при первом запуске продукта, а Ориджин предлагает в начале установки выбрать, хотите ли вы поставить программу (нужно отметить галочкой).
Однако, дружок, если ты привык качать пиратский контент с торрентов, далеко не всегда игра будет комплектоваться набором необходимых библиотек. Иногда приходится заходить на официальный сайт Microsoft и вручную загружать оттуда свежий дистрибутив.
О старых версиях C++. Нужно ли их удалять?
Если перейти по адресу Пуск – Панель управления – Установка и удаление программ, в списке можно найти с десяток наименований различных версий Microsoft Visual C++. Версии х86 и х64, версии 2005, 2008, 2010, 2017, различные численные нумерации и т.д. Пользователи вполне логично полагают, что имеющаяся версия 2017 года самая новая, а остальное можно смело удалять, также как и версии для х86 систем, если они в данный момент сидят на 64-разрядной версии операционной системы.
В общем так это не работает, нельзя рассчитывать, что более свежая версия обладает обратной совместимостью. Более старые игры используют устаревшие версии Microsoft Visual C++ Redistributable, поэтому отсутствие в системе необходимой версии программного пакета приведет к невозможности запуска. То же самое касается и различных разрядностей (х86, x64) – они также могут использоваться программами и играми.
Как вручную скачать Microsoft Visual C++ Redistributable
Практически весь перечень программных пакетов и клиентских продуктов, разрабатываемых компанией Microsoft, доступен у них на официальном сайте. Крайне нежелательно заходить на сторонние ресурсы, тыкая на первую попавшуюся ссылку в поисковой системе, так как в этом случае нельзя быть точно уверенным, что под установщик не был замаскирован какой-нибудь вирус, шпионское ПО или майнер криптовалют.
На выбор для скачивания предоставляется множество ссылок с различными разрядностями и версиями программного пакета C++. Общий вес их небольшой – много дискового пространства на винчестере они не потребуют. Поэтому имеет смысл сразу поставить весь список (2008, 2010, 2012, 2013, 2015, 2017). Одни понадобятся для уже относительно старых игр и программ, другие – для современных новинок. Сама установка интуитивно понятна.
Как переустановить библиотеки Visual C++
Пользователю может понадобиться переустановить Visual C++, например, если он столкнется с ошибкой о каком-нибудь отсутствующем .dll файле. Часто бывает так, что идущий в комплекте с игрой установщик не совсем исправен или при установке происходит сбой. Тогда игру невозможно запустить, что приводит к необходимости переустановки. Делать это нужно следующим образом:
- Удалить проблемный дистрибутив, воспользовавшись пунктом “Установка и удаление программ” в Панели управления Windows или специализированным софтом для очистки системы, где есть соответствующий функционал, например, CCleaner.
- Перезагрузиться.
- Загрузить на компьютер дистрибутив/дистрибутивы необходимых версий Microsoft Visual C++ для своей разрядности операционной системы.
- Запустить инсталлятор и провести установку согласно инструкции.
- Провести повторную перезагрузку, чтобы все установилось корректно.
Где хранятся библиотеки Visual Studio
Файлы могут быть повреждены из-за того, что у вас либо многокорневая рабочая область, где одна папка является дочерней по отношению к другой, либо вы используете символические ссылки для открытия файла. Сократите папки в рабочей области до одной и удалите символическую ссылку. Это должно решить вашу проблему.
Как заставить IntelliSense работать правильно?
Без какой-либо настройки расширение попытается найти заголовки, выполнив поиск в папке рабочей области и эмулируя компилятор, найденный на вашем компьютере. (например, cl.exe/WSL/MinGW для Windows, gcc/clang для macOS/Linux). Если этой автоматической конфигурации недостаточно, вы можете изменить значения по умолчанию, выполнив команду C/C++: Изменить конфигурации (пользовательский интерфейс). В этом представлении вы можете изменить компилятор, который вы хотите эмулировать, пути для включения файлов, которые вы хотите использовать, определения препроцессора и многое другое.
Или, если вы устанавливаете расширение системы сборки, которое взаимодействует с нашим расширением, вы можете разрешить этому расширению предоставлять вам конфигурации. Например, расширение CMake Tools может настраивать проекты, использующие систему сборки CMake. Используйте C/C++: изменение поставщика конфигурации. чтобы разрешить любому такому расширению предоставлять конфигурации для IntelliSense.
Третий вариант для проектов без поддержки расширений системы сборки — использовать файл compile_commands.json, если ваша система сборки поддерживает создание этого файла. В разделе «Дополнительно» пользовательского интерфейса конфигурации вы можете указать путь к вашему compile_commands.json, и расширение будет использовать информацию о компиляции, указанную в этом файле, для настройки IntelliSense.
Почему я вижу красные волнистые линии под типами стандартной библиотеки?
Самой распространенной причиной этого является отсутствие путей включения и определений. Самый простой способ исправить это на каждой платформе:
Linux/Mac: установите для intelliSenseMode»: «clang-x64 or intelliSenseMode»: «gcc-x64 иcompilePath в c_cpp_properties.json путь к вашему компилятору.
Windows: если вы используете компилятор Microsoft C++, задайте intelliSenseMode»: «msvc-x64 , но не добавляйте свойствоcompilePath в c_cpp_properties.json. Если вы используете Clang для Windows, задайте для intelliSenseMode»: «msvc-x64 иcompilePath в c_cpp_properties.json путь к вашему компилятору.
Как заставить новый IntelliSense работать с MinGW в Windows?
Как заставить новый IntelliSense работать с подсистемой Windows для Linux?
В чем разница между includePath иbrowse.path?
Эти два параметра доступны в файле c_cpp_properties.json и могут сбивать с толку.
включить путь
Этот массив строк пути используется механизмом IntelliSense «по умолчанию». Этот новый движок предоставляет функции IntelliSense с учетом семантики и станет возможной заменой синтаксическому анализатору тегов, на котором работало расширение с момента его первого выпуска. В настоящее время он предоставляет всплывающие подсказки и волнистые линии ошибок в редакторе. Остальные функции (например, автозавершение кода, справка по подписи, переход к определению и т. д.) реализуются с использованием базы данных синтаксического анализатора тегов, поэтому по-прежнему важно убедиться, что параметрBrowse.path задан правильно.
browse.path
Этот массив строк пути используется «Синтаксическим анализатором тегов» («движком просмотра»). Этот движок будет рекурсивно перечислять все файлы по указанным путям и отслеживать их как потенциальные включения при анализе тегов папки вашего проекта. Чтобы отключить рекурсивное перечисление пути, вы можете добавить /* к строке пути.
При первом открытии рабочей области расширение добавляет $ к обоим массивам. Если это нежелательно, вы можете открыть файл c_cpp_properties.json и удалить его.
Как воссоздать базу данных IntelliSense?
Начиная с версии 0.12.3 расширения существует команда для сброса базы данных IntelliSense. Откройте палитру команд ( ⇧⌘P (Windows, Linux Ctrl+Shift+P ) ) и выберите команду C/C++: сброс базы данных IntelliSense.
Что такое папка ipch?
Языковой сервер кэширует информацию о включенных файлах заголовков для повышения производительности IntelliSense. Когда вы редактируете файлы C/C++ в папке рабочей области, языковой сервер будет хранить файлы кеша в папке ipch. По умолчанию папка ipch хранится в каталоге пользователя. В частности, он хранится в папке %LocalAppData%/Microsoft/vscode-cpptools в Windows, а в Linux и macOS — в папке ~/.vscode-cpptools. Используя каталог пользователя в качестве пути по умолчанию, он создаст одно расположение кэша для каждого пользователя для расширения. Поскольку ограничение размера кеша применяется к расположению кеша, наличие одного расположения кеша на пользователя ограничит использование дискового пространства кешем одной папкой для всех, использующих значение параметра по умолчанию.
Папки хранения VS Code для каждой рабочей области не использовались, потому что местоположение, предоставляемое VS Code, не очень хорошо известно, и мы не хотели записывать файлы объемом в гигабайты, где пользователи могли бы их не видеть или не знать, где их найти.
Имея это в виду, мы знали, что не сможем удовлетворить потребности каждой среды разработки, поэтому мы предоставили параметры, позволяющие вам настроить способ, который лучше всего подходит для вашей ситуации.
«C_Cpp.intelliSenseCachePath»:
Этот параметр позволяет установить рабочую область или глобальные переопределения для пути к кешу. Например, если вы хотите использовать одно расположение кэша для всех папок рабочей области, откройте настройки VS Code и добавьте параметр пользователя для пути к кэшу IntelliSense.
«C_Cpp.intelliSenseCacheSize»:
Этот параметр позволяет установить ограничение на объем кэширования расширения. Это приблизительное значение, но расширение приложит все усилия, чтобы размер кеша был как можно ближе к установленному вами пределу. Если вы разделяете расположение кэша между рабочими областями, как описано выше, вы по-прежнему можете увеличивать или уменьшать ограничение, но вам следует убедиться, что вы добавили пользовательский параметр для размера кэша IntelliSense.
Как отключить кэш IntelliSense (ipch)?
Если вы не хотите использовать функцию кэширования IntelliSense, которая повышает производительность IntelliSense, вы можете отключить эту функцию, установив для параметра Размер кэша IntelliSense значение 0 (или «C_Cpp.intelliSenseCacheSize»: 0″ в редакторе настроек JSON). ).
Как настроить отладку?
Отладчик должен быть настроен, чтобы знать, какой исполняемый файл и отладчик использовать:
В главном меню выберите «Выполнить» > «Добавить конфигурацию». .
Теперь файл launch.json будет открыт для редактирования с новой конфигурацией. Настройки по умолчанию вероятно будут работать, за исключением того, что вам нужно указать настройки программы.
Дополнительную информацию о настройке отладчика см. в разделе Настройка отладки.
Как включить символы отладки?
Включение символов отладки зависит от типа используемого компилятора. Ниже приведены некоторые компиляторы и параметры компилятора, необходимые для включения символов отладки.
Если вы сомневаетесь, проверьте в документации вашего компилятора параметры, необходимые для включения символов отладки в вывод. Это может быть вариант -g или —debug .
Кланг (C++)
- Если вы вызываете компилятор вручную, добавьте параметр —debug.
- Если вы используете сценарий, убедитесь, что установлена переменная среды CXXFLAGS. Например, экспортируйте CXXFLAGS=»$ —debug» .
- Если вы используете CMake, убедитесь, что параметр CMAKE_CXX_FLAGS установлен. Например, экспортируйте CMAKE_CXX_FLAGS=$ .
Клэнг (К)
См. Clang C++, но используйте CFLAGS вместо CXXFLAGS .
gcc или g++
Если вы вызываете компилятор вручную, добавьте параметр -g.
cl.exe
Символы находятся в файле *.pdb.
Почему не работает отладка?
Мои точки останова не срабатывают
Когда вы начинаете отладку, если ваши точки останова не связаны (сплошной красный кружок) или они не срабатывают, вам может потребоваться включить символы отладки во время компиляции.
Отладка начинается, но все строки в трассировке стека отображаются серым цветом
Если ваш отладчик показывает серую трассировку стека, не останавливается в точке останова или символы в стеке вызовов серые, значит, ваш исполняемый файл был скомпилирован без символов отладки.
Что делать, если я подозреваю проблему с расширением C/C++
Если у вас возникла проблема с расширением, которую мы не можем диагностировать на основе информации в вашем отчете о проблеме, мы можем попросить вас включить ведение журнала и отправить нам свои журналы. Информацию о том, как получить журналы расширения C/C++, см. в разделе Ведение журналов расширений C/C++.
Если у вас есть другие вопросы или вы столкнулись с какими-либо проблемами, отправьте сообщение о проблеме на GitHub.
Мне любопытно, когда я написал некоторый код C++ для использования чего-то внутри стандартных библиотек C++, например: я использую поток ввода-вывода:
Мне не нужно указывать IDE, где найти эту библиотеку (я использую Visual Studio). Как IDE узнает, где найти эти библиотеки для компоновки с моей программой?
Кроме того, если я хочу использовать какие-то сторонние библиотеки (как я понимаю, я должен получить dll вместо исходного кода?), как мне включить эти библиотеки в мой проект?
где находится стандартная библиотека C++? |
Везде, где решит автор компилятора.
Мне не нужно указывать IDE, где найти эту библиотеку (я использую Visual Studio). Откуда IDE знает, где найти эти библиотеки для компоновки с моей программой? |
Обычно это работа компилятора, а не IDE. Компилятор должен знать, где находится его стандартная библиотека без каких-либо дополнительных параметров.
Как мне включить эти библиотеки в мой проект? |
Есть много вариантов, они различаются в зависимости от компилятора/IDE.
если я хочу использовать некоторые сторонние библиотеки (как я понимаю, я должен получить dll вместо исходного кода?) Как мне включить эти библиотеки в мой проект? |
Если для Windows доступна предварительно скомпилированная DLL, используйте ее. Это избавит вас от необходимости создавать библиотеку.
Чтобы указать, где находятся включаемые файлы для библиотеки, откройте страницы свойств вашего проекта. В компиляторе C/C++ на вкладке «Общие» первой записью является «Дополнительные каталоги включения». Перечислите там любые каталоги, которые компилятор должен искать в том порядке, в котором вы хотите их искать. Несколько записей разделяются точкой с запятой.
Спасибо за ответ.
(1) То есть обычно стандартная библиотека находится на моем компьютере, и когда я устанавливаю компилятор, эти библиотеки тоже устанавливаются, правильно?
(2) если предварительно скомпилированная DLL недоступна для Windows, я должен использовать исходный код для компиляции для самостоятельного создания DLL, правильно?
2) Да, хотя по моему опыту это редкость. Если пакет доступен для Windows, обычно имеется либо статическая библиотека, либо предварительно созданная библиотека DLL.
Данный ответ кажется мне несколько упрощенным.
Весь скомпилированный код должен где-то находиться.
предварительно скомпилированный код
Все существующие компиляторы поставляются с предварительно скомпилированными стандартными библиотеками, почти всегда в виде нескольких библиотек DLL (.dll в Windows или .so в nixen). Это больше, чем один, заметьте. (Есть стандартная библиотека C, которая состоит как минимум из двух частей — базовой и математической. И есть стандартная библиотека C++, которая также состоит из частей.)
Все, что вы используете из STL, представляет собой код, компилируемый вашим приложением (все шаблоны — это новые вещи, созданные вашим приложением). Тем не менее, иногда некоторые части могут быть предварительно скомпилированы. Скажем, класс std::string — достаточно распространенный, поэтому ваш компилятор может уже предварительно скомпилировать его и просто связать с конечным исполняемым файлом, статически или динамически. Кроме того, некоторый код STL зависит от того, что уже находится в предварительно скомпилированной библиотеке, например.
предварительно скомпилированный код обычно находится в библиотеках DLL, которые должны быть у вашего пользователя.
Все эти вещи должны быть связаны (или связаны) с вашим окончательным исполняемым файлом. Некоторые из них могут быть статически связаны (скомпилированы как часть окончательного исполняемого файла), но большая их часть находится в библиотеках DLL, которые должны присутствовать в вашей системе.
Обычно вы этого не замечаете, потому что (1) в вашей системе есть эти библиотеки DLL, так как вы установили компилятор (2) ваш компилятор использует стандартные системные библиотеки DLL. Например, у всех, у кого есть Windows, установлена стандартная библиотека времени выполнения Microsoft C. Это часть системы. Таким образом, компиляторы, которые компилируются для Windows, обычно (не все делают, но умные) компилируются со стандартными библиотеками DLL библиотеки времени выполнения Microsoft. Вы даете своим друзьям файл .exe, но этот .exe использует библиотеки DLL, которые ваши друзья (должны были) уже установить на свой компьютер, поэтому вы не замечаете, что на самом деле вы дали им только кусок файла. ваше приложение. Это работает так же для пользователей *nix.
Если библиотеки DLL не являются стандартными для системы, их необходимо предоставить вместе с окончательным исполняемым файлом. (Вот почему люди создают установщики и пакеты RPM. Они обрабатывают зависимости приложения — библиотеки DLL, необходимые приложению.) Например, когда вы компилируете приложение C++ с помощью MinGW в Windows и отправляете .exe в ваши друзья, и они говорят, что он не запустится, потому что вы не отправили им одну или несколько вещей в C:\MinGW\bin, например libstdc++-6.dll и libgcc_s_dw2-1.dll.
компилятор знает, где находится этот материал.
Теперь, что касается компилятора. Все в стандартных библиотеках C и C++ является «особенным» — компилятор знает (или может знать) о них то, чего он не может знать ни о какой другой библиотеке. Например, если вы компилируете код с помощью , компилятор знает, что нужно связать с библиотекой C Math — вам не нужно говорить ему об этом. (Заметьте, это не относится ко всем старым компиляторам.)
Где-то в вашей системе есть два важных каталога -- каталоги, о которых знает компилятор.
Первый — это каталог «include», в котором содержится все, что вы . (За исключением, может быть, некоторых библиотек C++ - некоторые компиляторы помещают вещи C++ в странные места. Не брезгуйте, однако, у них есть изюминка.) Поэтому, если вы хотите загрузить и использовать специальную библиотеку Foo, вы должны поместить заголовки Foo в каталог «include». (Это или скажите компилятору добавить какой-либо другой каталог в список каталогов, рассматриваемых так же, как каталог «include». [предостережения!])
Другим важным каталогом является каталог "lib", который содержит всю информацию, необходимую для связывания с библиотеками DLL, или код для статического связывания библиотеки. На самом деле это немного сложнее, чем кажется, но для наших целей этого вполне достаточно. Поэтому, когда вы загружаете специальную библиотеку Foo, вы должны поместить данные статической/динамической библиотеки Foo в каталог «lib». (Это или сказать компилятору еще раз.)
Мне очень понравился макрос отсрочки в этом коде. Я не программист на С++, поэтому понятия не имею; это широко используемая вещь? Мне показалось классным использование RAII и лямбда-выражений.
Defer на самом деле не нужен, если вы программируете в так называемом книжном стиле "идиоматического C++". По сути, это защита области действия, выход из области действия, которая обычно обрабатывается деструктором любых ресурсов, с которыми вы работаете.
Defer также используется в Go, Swift и JAI!
Поток Джона — единственное место, где я видел его использование. Хотя это очень полезно
Мне больше нравятся списки, поэтому я сделал их. из pastebin
Я боролся с той же проблемой в других контекстах. В некотором смысле экосистема VS и Microsoft великолепна. Для низкоуровневых/базовых вещей это кажется намного сложнее, чем должно быть.
Однажды я попытался скомпилировать Java JDK в Windows и столкнулся с такими проблемами VS, это довольно ужасно.
Это кульминация нескольких дней работы, направленной на то, чтобы получить расположение библиотек Visual Studio, чтобы он мог связать их в своем новом языке программирования (кодовое имя Jai) и в компиляторе для этого языка.
Это показывает, насколько сложно получить что-то такое простое, как расположение папки.
Вы можете найти на Twitch видеозаписи кодирования в прямом эфире и увидеть, через что ему пришлось пройти, чтобы найти решение. Часть 1 Часть 2 Часть 3 Часть 4 Часть 5 Часть 6
Можно было бы скопировать и вставить код из clang, который делает именно это, и не тратить все свое время, пытаясь выяснить, где находятся все эти библиотеки (полагаю, в каталоге windows sdk+vs). ♂️
Странно, разве wchar_t в Windows не просто кодовые единицы UTF-16? Почему это не может быть преобразовано в UTF-8? Это просто разные кодировки для Unicode.
Я думаю, что это UCS-2, даже не UTF-16.
Спасибо, я искал способ сделать это. Невероятно, насколько недружественно программное обеспечение Windows, когда вы хотите использовать их вместе, по сравнению с linux/mac (например, используйте компилятор Visual C++ из другой программы).
Не проще ли было бы позволить разработчику указать правильный каталог, как и в случае с любой другой зависимостью, и иметь разумное значение по умолчанию. Место установки не рандомизируется.
jblow старается делать все наилучшим образом, а не самым простым.
Раньше в его стримах она называлась find_visual_studio_in_a_ridiculous_garbage_way
Похоже, это действительно странная смесь идиом Jai, C и C++.
Я предполагаю, что free_resources не является деструктором, чтобы сделать это вызываемым из C?
Определение отсрочки с использованием перегруженного оператора+ — изящный прием, делающий синтаксис более естественным, но я бы не стал использовать его так часто в реализации. Я бы, вероятно, использовал что-то вроде следующего в своем собственном коде для случаев, когда требуется бесплатно (и что-то подобное для ->Release()):
Кроме того, сравнение версий, вероятно, можно было бы упростить примерно так:
Зависимости в проектах C и C++ сложны. Создавать проекты C и C++ сложно, а поддерживать информацию о зависимостях внутри проектов C и C++ сложно.
Visual Studio C++ — это самая популярная интегрированная среда разработки и компилятор для платформ Microsoft Windows, широко используемая разработчиками C и C++. Очень часто разработчики вручную добавляют информацию в проект вручную в среде IDE, но этот метод трудно поддерживать с течением времени. К счастью, MSBuild, система сборки, используемая Visual Studio, позволяет определять файлы внешних пользовательских свойств (это XML-файлы), что представляет собой интересную точку расширения для автоматизации и стандартизации многих задач.
В этом посте рассказывается о синтаксисе файлов .vcxproj и файлов свойств Visual Studio, а также о том, как их можно использовать для систематического и масштабируемого определения зависимостей 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).
Читайте также:
- Как сделать сноску со звездочкой в Word
- Как отменить сортировку в Excel
- Таблица Word не работает
- Как прошить самсунг а51 через компьютер
- Как убрать серую полосу в слове справа
Где находятся стандартные библиотеки c++ типа
Здравствуйте, нужна информация: куда устанавливаются и где можно откопать стандартные библиотеки c++, я использую среду qt, компилятор mingw, хотелось также попробовать библиотеку для длинной арифметики. Как ее установить?
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Где находятся стандартные процедуры записи
Где находятся стандартные процедуры записи для справочников и документов? Чтобы их отменить, и.
Где в тулбоксе находятся стандартные элементы управления?
Откуда брать готовые кнопки, контейнеры, листбоксы и др.? Не судите строго, знаю что здесь решаются.
Реализация функций из библиотеки math.h
Нужно написать прогу реализующая 4 функции из библиотеки math.h с помощь классов!
Список всех функций библиотеки Math
Gde mozhno nayti spisok vsex funkcii is biblioteki Math ??
66 / 66 / 54
Регистрация: 23.09.2012
Сообщений: 212
#include #include
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
Сообщение от maksvolf96
я использую среду qt, компилятор mingw,
Способ №1
1. В QtCreator Инклюдите нужную вам библиотеку.
2. Смотрите путь где она лежит.
3. PROFIT.
Способ №2
1. Кнопка пуск ---> поиск файлов
2. Вбиваете имя нужной вам библиотеки.
3. PROFIT.
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
math.h - это не библиотека, а заголовочный файл. Заголовочные файлы находятся в папке include компилятора. Реализации (библиотеки) находятся в папке lib компилятора (в mingw - файлы с расширением .a).
Регистрация: 05.08.2021
Сообщений: 200
Скиньте ссылку для скачивания math.h, please!
Неэпический
17871 / 10636 / 2054
Регистрация: 27.09.2012
Сообщений: 26,738
Записей в блоге: 1
Сообщение от maksvolf96
хотелось также попробовать библиотеку для длинной арифметики.
А как это связано с
Сообщение от maksvolf96
куда устанавливаются и где можно откопать стандартные библиотеки c++
Уж не решили ли вы свою "библиотеку для длинной арифметики" запихать в потроха компилятора?
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
Сообщение от KZProg
Скиньте ссылку для скачивания math.h, please!
Троллируешь чтоль?
Регистрация: 05.08.2021
Сообщений: 200
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Стандартные библиотеки
Всем привет! Как научиться правильно пользоваться стандартными библиотеками, чтоб не изобретать.
Стандартные библиотеки ?
В языке программирования C++ термин Стандартная Библиотека означает коллекцию классов и функций.
Стандартные библиотеки с++
Здравствуйте. Существует ли источник, в котором можно узнать о содержимом стандартных библиотек c++.
Суммирование рядов без использования библиотеки math.h
Задание: Необходимо сделать без использования math.h #include <stdio.h> #include <stdlib.h> .
Или воспользуйтесь поиском по форуму: