6

我对跨平台和交叉编译器的术语有点困惑。让我先明确一下跨平台。当人们谈论跨平台时,它是指CPU的架构,即X86和X64?或操作系统,即 Windows 32 位或 Windows 64(服务器或桌面)?UNIX 没有 64 位或 32 位之类的不同风格。为什么这样?

.NET和java是交叉编译语言,是什么意思?当程序在 .NET 中编译时,我们必须选择 X86、X64 或 Any CPU 等选项。那是什么意思?同样在安装项目中,我们必须选择 x86 和 x64 之间的选项。因此,如果程序是在 x86 中编译的,并且在 x64 上创建了 msi 文件,它将在 X64 和 x86 上运行还是在任何一个上运行?

4

5 回答 5

13

当人们谈论跨平台时,它是指CPU的架构,即X86和X64?或操作系统

两个都。它通常是指在虚拟机中运行的软件或为每个平台单独编译的软件。

UNIX 没有 64 位或 32 位之类的不同风格。

确实如此。

因此,如果程序是在 x86 中编译的,并且在 x64 上创建了 msi 文件,它将在 X64 和 x86 上运行还是在任何一个上运行?

如果您以 x86 为目标,amd64 也将运行代码(在 32 位模式下)。在哪里创建安装程序 msi 文件并不重要。

交叉编译意味着宿主和目标平台不相同。例如在 Linux 计算机上构建 windows 软件。

于 2009-06-23T08:01:56.577 回答
6

跨平台是指一个程序在多个不同平台上运行的能力。跨平台代码经常使用各种工具包/语言来实现这一点(Qt、Flash 等)

交叉编译器是一种编译器,它为与编译器本身运行的平台不同的平台生成代码。嵌入式目标的编译器几乎总是交叉编译器,因为很少有嵌入式目标能够托管编译器本身。

交叉编译器需要一个不假定主机和目标系统兼容的构建系统,即您不能在构建时运行目标可执行文件,例如确定生成代码的运行时方面(例如字长)。

(交叉编译也可以应用于编译器本身。这被称为加拿大交叉编译,这是一种在主机上构建(交叉)编译器的技术,该编译器与应该运行编译器的主机不同。在这种情况下我们有三个平台:

  • 编译器所构建的平台(构建)。
  • 托管编译器(主机)的平台。
  • 编译器为其生成代码的平台(目标)。

我怀疑大多数程序员永远不会遇到这种情况。)

于 2009-06-23T08:34:08.147 回答
1

我想,跨平台可能表明它可以在 Windows/Mac/*nix 上运行,或者它可以在 x86/x86_64/ARM/PPC 上运行,但除非另有说明,否则我认为这通常意味着它可以在不同的操作系统上运行系统。例如,“Java 应用程序是跨平台的”这通常适用于 Java 应用程序可以在 Win/Mac/*nix 上运行的事实。

于 2009-06-23T08:02:15.123 回答
1

“跨平台”是指在许多不同平台上工作的东西,可能是操作系统或 CPU(类型 (x86/MIPS) 或位大小 (32/64))。这并不意味着是否需要重新构建才能在其他平台上运行,例如 QT 可以针对许多平台,但您的应用程序可能需要在每个平台上重新构建,或者您可以构建一次,例如 java 或 .Net

“交叉编译器”是指该平台上的编译器,它使程序可以在另一个平台上运行。因此在 Win32 上构建 WinCE 可执行文件。或者,您可以通过构建在 Windows 中运行的 GCC 版本,在窗口框上构建 Linux 应用程序,但输出目标是 Linux/Elf。如果你有一个嵌入式设备,你几乎总是交叉编译来构建目标可执行文件。

X86、X64 或任何 CPU。那是什么意思?它控制 .Net 应用程序如何针对一种体系结构或不针对一种体系结构,如果您针对,那么它不会在两者上运行,但编译器会进行一些优化。如果它是非目标(任何 CPU),它将在两者上运行。如果您直接调用外部 .dll 并硬链接 64 位或 32 位版本,这主要是有用的,因此只希望您的应用程序在相同的环境中运行。

在安装程序前面,Windows 64 位可以运行 32 位应用程序和 32 位安装程序,而 64 位应用程序不能在 32 位系统上运行。在其他平台上,您通常会为正在运行的架构(Linux)重建代码,或者在 Mac 上下载通用可执行文件(我认为其中有多个目标构建)

于 2009-06-23T08:03:53.577 回答
1

本机编译器:本机编译器是那些从源代码生成可执行文件的编译器,而这些可执行文件又将在编译器可用的同一系统上执行。

交叉编译器:交叉编译器是那些从源代码生成可执行文件的编译器,这些文件又将在某些不同的系统上执行,然后在哪个编译器可用。

在BoundsCheck上查找有关本机和交叉编译器的示例

于 2010-06-29T18:16:49.617 回答