Код компилируется в целевой базовый ЦП (например, 32-разрядный x86, x86_64 или ARM), но не обязательно для процессора с спецификацией c, такого как Core i9-10900K. По умолчанию компилятор обычно генерирует код для работы на самом широком диапазоне процессоров. А Intel и AMD гарантируют прямую совместимость для выполнения этого кода на новых процессорах. Компиляторы часто предлагают переключатели для оптимизации для работы на новых процессорах с новыми наборами инструкций, но вы делаете это редко, поскольку не у всех ваших клиентов есть такая конфигурация. Или, возможно, вы создаете свой код дважды (один раз для старых процессоров и оптимизированная сборка для новых процессоров).
Существует также концепция, называемая кросс-компиляцией. Вот где компилятор генерирует код для совершенно другого процессора, чем он работает. Так обстоит дело, когда вы создаете приложение iOS на Ma c. Сам компилятор представляет собой программу x86_64, но он генерирует набор инструкций процессора ARM для запуска на iPhone.
. Код компилируется и связывается с определенным набором API ОС и внешними библиотеками времени выполнения (включая C / Среда выполнения C ++). Если вы хотите, чтобы ваш код запускался на Windows 7 или Ma c OSX Maverics, вы не станете статически ссылаться на API, который существует только в Windows 10 или Ma c OS Big Sur. Код будет компилироваться, но не будет работать в более старых операционных системах. Вместо этого вы должны сделать обходной путь или условно загрузить API, если он доступен. Microsoft и Apple обеспечивают прямую совместимость, предоставляя те же самые API-интерфейсы библиотеки времени выполнения, которые будут доступны в более поздних выпусках ОС.
Дополнительно Windows поддерживает выполнение 32-разрядных процессов на 64-разрядных микросхемах и ОС. Ma c может даже эмулировать x86_64 на своих новых устройствах на базе ARM, которые появятся позже в этом году. Но я отвлекся.
Что касается Qt, они на самом деле предлагают несколько готовых конфигураций для своих эталонных двоичных загрузок. Поскольку, по крайней мере, на Windows, MSVCRT (C -время выполнения API из Visual Studio) тесно связаны с разными версиями компилятора Visual Studio. Поэтому они предлагают различные загрузки в соответствии с конфигурацией, для которой вы хотите создать свой код (32-разрядная, 64-разрядная, VS2017, VS2019, et c ...). Поэтому, когда вы собираете полное приложение со сторонними зависимостями, необходимо учитывать некоторые из этих конфигураций сборки, связывания и ЦП / ОС.