Visual studio x64 x86 чем отличается
Microsoft Visual C++ Redistributable Package – это распространяемые пакеты, которые устанавливают компоненты среды выполнения библиотек Visual C++. Эти компоненты необходимы для выполнения программ, разработанных с помощью среды программирования Visual Studio.
В состав компонентов входят: среда выполнения C (CRT), стандартный C++, MFC, C++ AMP и OpenMP. Делаем вывод, приложения, разработанные в Visual Studio с использованием этих библиотек не будут работать, если не установлена сама среда Visual Studio или распространяемые пакеты Microsoft Visual C++. Эти пакеты созданы специально для того, чтобы обычным пользователям не нужно было устанавливать полноценную среду разработки Visual Studio.
Но, начнём мы свой разговор с DLL ( Dynamic Link Library — «библиотека динамической компоновки», «динамически подключаемая библиотека» ).
Вы запускаете приложение, начинается поиск всех компонентов по списку. Когда система не находит нужный файл, поиск прекращается, выдается окно системной ошибки.
Проблема решается несколькими способами: скачать DLL файл для Windows 7/8.1/10 или полностью обновить пакет библиотеки.
Заходим на сайт DLL-FILES.COM https://ru.dll-files.com/ → Вбиваем в окно поиска искомое (vcruntime140.dll) → Нажимаем кнопку "Поиск DLL файлов" → Кликаем по файлу vcruntime140.dll → Качаем и устанавливаем:
Процесс установки пропускаем, так как это выходит за рамки заявленной темы. Но, вы можете посмотреть ролик . Вариант автоматической установки DLL файла, при помощи программного обеспечения:
Примечание: если ваша система — 64-разрядная, следует качать и устанавливать, как x86 компоненты (для 32-бит), так и x64, так как многим приложениям для запуска нужны библиотеки 32-бит (x86).
Итак, на примере системной ошибки, в связи с отсутствием файла vcruntime140.dll, мы поняли, что решается эта проблема двумя способами:
1. Скачивание и установка необходимого файла.
2. Установка ( или восстановление ) распространяемого пакета Microsoft Visual C ++ для Visual Studio 2015/2017/2019.
Многие бывалые юзеры, не дожидаются, когда появятся системные ошибки и сразу после обновления драйверов на «свежей» ОС Windows, ведут установку Microsoft Visual C++ Redistributable Packag.
Навеяно другим вопросом, пытаясь ответить на который, обнаружил такое непонятное мне поведение VC++ 2019.
На всякие возможные проблемы с памятью и иже с ними не смотрите, это просто урезанный до минимума код.
Так вот, при компиляции x64 строкой cl /EHsc main.cpp все проходит на ура.
А вот той же командой для x86 получаем
Кто-то может пояснить, почему такое отличие при компиляции под разные платформы.
Clang примерно тоже-самое говорит, только немного подробно: error: use of overloaded operator '[]' is ambiguous (with operand types 'String' and 'int') , и если явно сказать что мы имеем ввиду size_t то он все ест. Что один что другой. Там же просто размеры типов одинаковы. Вот он и не знает что взять. e.g: . [(size_t)0] . . [(size_t)1]
@Kotomi Да как обойти — понятно. но почему такая разница? Где-то MS не доработали? Или переработали? :) Или есть какая-то хитрость, специально допущенная.
Ну это же то самое неявное привидение типов. Я с -m32 не могу кстати собрать с GCC. он не может найти мне все что нужно для
1 ответ 1
g++ ведёт себя аналогично: g++ -m32 -c some.c++ -pedantic
32-х битный компилятор находит четыре варианта:
- Оставить тип String , преобразовать int в size_t : char& String::operator[](size_t)
- Оставить тип String , преобразовать int в size_t : const char& String::operator[](size_t) const
- Преобразовать тип String в char* , оставить тип int : [char *, int]
- Преобразовать тип String в const char* , оставить тип int : [const char *, int]
Во всех четырех вариантах один тип преобразуется, второй нет. Поэтому компилятор не может выбрать лучший кандидат.
В 64-х битном случае ситуация иная: встроенный оператор [] имеет сигнатуру operator[](char*, long int)
Так как литерал 0 имеет тип int , то опции 3 и 4 из списка выше превращаются в
Преобразовать тип String в char* , преобразовать тип int в long int : [char *, long int]
Преобразовать тип String в const char* , преобразовать тип int в long int : [const char *, long int]
Так как добавляется Promotion, который ухудшает кандидата, то компилятор отбрасывает эти кандидаты. Поэтому в 64-х битном случае компилируется без ошибок.
Чтобы запретить компилятору рассматривать встроенные операторы индексирования, явным образом сделайте литералы беззнаковыми: 0u и 5u . Тогда будет компилироваться и 64, и 32 бита.
PS. Тип встроенного оператора []
ISO C++ 2020, глава 12.7
16 For every cv-qualified or cv-unqualified object type T there exist candidate operator functions of the form . T & operator[](T *, std::ptrdiff_t);
То, что 64 битный g++ для ptrdiff_t использует long int , я установил экспериментально.
Visual Studio позволяет настраивать сборки приложения для различных платформ, включая 64-разрядные платформы. Дополнительные сведения о поддержке 64-разрядных платформ в Visual Studio см. в статье 64-разрядные приложения.
Visual Studio 2022 выполняется как 64-разрядное приложение. Она совершенно отделена от платформ, которые можно выбрать для проектов в Visual Studio. Вы можете использовать любую версию Visual Studio, предназначенную для 32-разрядных и 64-разрядных платформ.
Visual Studio выполняется как 32-разрядное приложение. Она совершенно отделена от платформ, которые можно выбрать для проектов в Visual Studio. Вы можете использовать любую версию Visual Studio, предназначенную для 32-разрядных и 64-разрядных платформ.
Нацеливание на платформы с помощью диспетчера конфигураций
Диспетчер конфигураций позволяет быстро добавить новую платформу для нацеливания проекта. Если выбрать одну из платформ, входящих в Visual Studio, свойства проекта изменяются для сборки проекта в соответствии с выбранной платформой.
Настройка проекта для 64-разрядной платформы
В строке меню последовательно выберите пункты Сборка > Диспетчер конфигураций.
В списке Активная платформа решения выберите 64-разрядную платформу для нацеливания решения, а затем нажмите кнопку Закрыть.
Если нужная платформа не отображается в списке Активная платформа решения, выберите Создать.
Откроется диалоговое окно Создание платформы решения.
В списке Введите или выберите новую платформу выберите x64.
Если вы присваиваете конфигурации новое имя, может потребоваться изменить параметры в конструкторе проектов для нацеливания на соответствующую платформу.
Если требуется скопировать параметры из текущий конфигурации платформы, выберите ее и нажмите кнопку ОК.
Обновляются свойства для всех проектов в решении, нацеленных на 64-разрядную платформу, и следующая сборка проекта будет оптимизирована под 64-разрядные платформы.
Имя платформы Win32 используется для проектов C++ и соответствует x86. Visual Studio поддерживает платформы уровня проекта и платформы уровня решения. При этом платформы проекта основаны на системах проектов для разных языков. Проекты C++ используют Win32 и x64, а платформы решения — x86 и x64. Когда вы выбираете x86 в качестве конфигурации решения, Visual Studio выбирает для проектов C++ платформу Win32. Чтобы просмотреть параметры платформы уровня проекта и платформы уровня решения, откройте Configuration Manager и обратите внимание на два параметра платформы. Платформа уровня решения отображается в раскрывающемся списке Активная платформа решения, а платформа уровня проекта показана в таблице для каждого проекта.
Нацеливание на платформы в конструкторе проектов
Конструктор проектов также предоставляет способ нацеливания проекта на различные платформы. Если выбор одной из платформ в списке диалогового окна Создание платформы решения не подходит для вашего решения, можно создать пользовательское имя конфигурации и изменить параметры в конструкторе проектов для нацеливания на соответствующую платформу.
Способ выполнения этой задачи зависит от используемого языка программирования. Дополнительные сведения см. на следующих страницах:
Для проектов Visual Basic см. раздел /platform (Visual Basic).
Для проектов C++/CLI см. статью /clr (компиляция CLR).
Изменение файла проекта вручную
Иногда необходимо вручную изменить файл проекта, чтобы выполнить ряд пользовательских настроек. Это бывает нужно сделать, к примеру, при наличии условий, которые не могут быть указаны в интегрированной среде разработки (ссылка, имеющая разный вид для двух разных платформ, как показано в следующем примере).
Пример. Ссылки на сборки x86 и x64 и библиотеки DLL
Перед изменением файла проекта в Visual Studio 2017 сначала необходимо выгрузить проект. Для этого щелкните узел проекта правой кнопкой мыши и выберите пункт Выгрузить проект. После редактирования сохраните изменения и перезагрузите проект, щелкнув правой кнопкой мыши узел проекта и выбрав пункт Перезагрузить проект.
Дополнительные сведения о файле проекта см. в статье Справочные сведения о схеме файлов проектов MSBuild.
This forum has migrated to Microsoft Q&A. Visit Microsoft Q&A to post new questions.
Answered by:
Question
When building, what's the difference between Win32 and x86? They both seem to be 32-bit.
Answers
It depends on the compiler. If you have a normal project it will generate x86/x64 code. A smart device project is a different story. The following is signature, not part of post
Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
Visual C++ MVP
All replies
X86 is for Intel/AMD's 32 bit chip set. Win32 can support other chipsets, such as ARM in a Windows Mobile project.
The following is signature, not part of post
Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
Visual C++ MVP
Thank you. Is it generating an intermediate set of byte codes for Win32 then? I know the ARM native instruction set is very different from the intel one.
And therefore is X86 the preferred platform as that generates native code?
Based on my understanding, the 32bit Windows API is commonly known as Win32. Meanwhile, 64Bit Windows API is called Win64. X86 and X64/AMD64 is referred to Intel/AMD ‘s CPU as Sheng pointed out. Win32 and X86 are defined into two different area.
Win32 is major designed for desktop version of Windows OS, but not limited, for example Windows CE, Windows Mobile, which also using 32 bit Win APIs but for different CPU platform, e.g. ARM.
For answering your question, for desktop version of windows, X86 is the platform for Win32 and X64/AMD64 is the platform for Win64.
Hope this information helps.
Yi Feng Li [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
This forum has migrated to Microsoft Q&A. Visit Microsoft Q&A to post new questions.
Answered by:
Question
Build => Configuration Manager => does not display 64 bit as an option. Selecting "new" requests a name. I don't see selecting a new platform as an option.
Answers
After trying both options, I like the right click Project -> Properties -> Build -> General -> Platform Target -> x64. This keeps everything cleaner. Thanks!
- Proposed as answer by Perry Qian-MSFT Microsoft contingent staff Thursday, October 24, 2019 1:13 AM
- Marked as answer by bhs67 Sunday, October 27, 2019 2:30 PM
All replies
It also talks about taking other paths to select Any CPU, 32bit or 64bot project profiles.
I'm not sure if I can understand what you want to do.
I take your description in a few ways.
You want to
1) make VS 2019 itself run with 64-bit
2) make a project run with 64-bit using VS 2019
3) make 64-bit application as default in VS 2019
I suppose 1) and 3) is impossible. Which do you want?
We can make a specific project run with 32-bit, 64-bit, or depend on platform.
Welcome to the MSDN forum.
As far as l know, Any CPU will compile your project to run on any platform which means both on the x86 and x64 platform.
If you still want to change it to x64 platform, you can select Build-->Configuration Manager-->You can choose different types for different projects, and if you don't have the x64 target platform, you can create it like this:
So you can specify your program to run on 64-bit platforms.
>> 2. You can also specify the target platform in the project properties as Ashidacchi said(Right-click on your every project-->Properties-->Build-->set Platform target to x64)
Hope it could help you.
Читайте также: