что такое кросс-компилятор и кроссплатформенность? - PullRequest
6 голосов
/ 23 июня 2009

Я немного запутался с условиями кросс-платформенности и кросс-компилятора. Позвольте мне сначала прояснить кросс-платформу. Когда люди говорят о кроссплатформенности, это означает архитектуру процессора, то есть X86 и X64? или ОС то есть 32-битная Windows или Windows 64 (серверная или настольная)? UNIX не имеет разных вкусов, таких как 64-битные или 32-битные. Почему так?

.NET и java - это кросс-компилятор, что это значит? Когда программа компилируется в .NET, мы должны выбрать опцию, такую ​​как X86, X64 или Any CPU. Что это значит? Также в проекте установки мы должны выбрать вариант между x86 и x64. Так что, если программа скомпилирована в x86, а MSI-файл был создан в x64, будет ли она работать как на X64, так и на x86, или на любом другом?

Ответы [ 5 ]

13 голосов
/ 23 июня 2009

Когда люди говорят о кроссплатформенности, это означает архитектуру процессора, то есть X86 и X64? или ОС

Оба. Обычно это означает, что sotfware работает на виртуальной машине или программное обеспечение, скомпилированное для каждой платформы отдельно.

UNIX не имеет различных разновидностей, таких как 64-битная или 32-битная.

Это так.

Так что, если программа скомпилирована в x86 и MSI-файл был создан на x64, она будет работать на X64 и x86 или на любом из?

Если вы нацелены на x86, amd64 также запустит код (в 32-битном режиме). Не имеет значения, где вы создаете MSI-файл установщика.

Кросс-компиляция означает, что хост и целевая платформа не совпадают. Например, сборка программного обеспечения Windows на компьютере с Linux.

6 голосов
/ 23 июня 2009

Кроссплатформенный относится к способности программы работать на нескольких разных платформах. Кросс-платформенный код часто использует различные наборы инструментов / языков для достижения этой цели (Qt, Flash и т. Д.)

Кросс-компилятор - это компилятор, который генерирует код для платформы, отличной от платформы, на которой работает сам компилятор. Компиляторы для встроенных целей почти всегда являются кросс-компиляторами, так как немногие встроенные цели способны содержать сам компилятор.

Для кросс-компиляторов требуется система сборки, которая не предполагает совместимость хоста и целевой системы, т.е. вы не можете запустить целевой исполняемый файл во время сборки, например, чтобы выяснить аспекты времени выполнения сгенерированного кода (например, размер слова) ).

(Кросс-компиляция также может применяться к самому компилятору. Это называется Канадская кросс-компиляция , которая представляет собой метод построения (кросс-компиляции) на хосте, отличном от компилятор должен быть запущен. В этом случае у нас есть три платформы:

  • Платформа, на которой построен компилятор (build).
  • Платформа, на которой размещен компилятор (хост).
  • Платформа, для которой компилятор генерирует код (цель).

Я подозреваю, что большинство программистов никогда не столкнется с этим.)

1 голос
/ 29 июня 2010

Собственные компиляторы. Собственные компиляторы - это те, которые генерируют исполняемые файлы из исходного кода, которые, в свою очередь, будут выполняться в той же системе, в которой доступен компилятор.

Кросс-компилятор: кросс-компиляторы - это те, которые генерируют исполняемые файлы из исходного кода, которые, в свою очередь, будут выполняться в какой-то другой системе, отличной от той, в которой доступен компилятор.

Найдите примеры нативных и кросс-компиляторов на BoundsCheck

1 голос
/ 23 июня 2009

«кроссплатформенность» относится к вещам, работающим на многих разных платформах, так что это может быть ОС или ЦП (тип (x86 / MIPS) или битовый размер (32/64)). Это не подразумевает, что для запуска на других платформах требуется только то, что можно, например, QT может быть нацелен на множество платформ, но ваше приложение может нуждаться в перестройке на каждой, или вы сможете собрать один раз, например, java или .Net

'кросс-компилятор' означает компилятор на этой платформе, который создает программу, которая может работать на другой платформе. Таким образом, сборка исполняемых файлов WinCE на Win32. Или вы можете создать приложение для Linux на оконном блоке, создав версию GCC, которая работает в Windows, но целью выхода является Linux / Elf. Если у вас есть встроенное устройство, вы почти всегда выполняете кросс-компиляцию для создания целевого исполняемого файла.

X86, X64 или любой процессор. Что это значит? Он контролирует, как приложение .Net нацелено на одну архитектуру или нет, если вы нацелены, то оно не будет работать на обоих, но многие компиляторы делают некоторые оптимизации. Если это не цели (Любой процессор), он будет работать на обоих. Это в основном полезно, если вы напрямую обращаетесь к внешним файлам .dll и жестко связываете 64-битную или 32-битную версию и, следовательно, хотите, чтобы ваше приложение работало только в той же среде.

На фронте установщиков Windows 64bit может запускать 32-битные приложения и 32-битные инсталляторы, где 64-битные приложения не могут работать в 32-битных системах. На других платформах вы обычно перестраиваете код для вашей архитектуры (Linux) или на Mac вы загружаете универсальные исполняемые файлы (которые, я думаю, имеют несколько целевых сборок внутри)

1 голос
/ 23 июня 2009

Кроссплатформенность, я полагаю, может указывать на то, что она работает на Windows / Mac / * nix или на x86 / x86_64 / ARM / PPC, но, если не указано иное, я полагаю, что это обычно означает, что она работает разные операционные системы. Например, «Java-приложения являются кроссплатформенными», это обычно относится к тому факту, что Java-приложения могут работать на Win / Mac / * nix.

...