开发用于SPARC,IBM power CPU的应用程序是否需要单独的编译器,而不是x86,x86-64目标?

开发SPARC和IBM PowerPC应用程序是否需要单独的编译器,而不是x86和x86-64目标?

如果是这样,那么Linux中的x86,x64二进制文件如何轻松移植到SPARC和PowerPC? 有没有办法使用虚拟化来模拟这些环境?

首先回答是,开发Power Architecture或SPARC的编译代码需要编译器生成这些处理器的代码。 生成x86或x86_64代码的编译器不会生成在Power Architecture或SPARC上运行的代码。 尽管如此,您可能会发现运行在x86(32或64)上的交叉编译器会生成Power或SPARC代码。 但是要注意的另一件事是对象文件格式(elf,xcoff等)。 指令集只是图片的一部分。 如果您提供有关您的特定起点和目标的更多细节,您可能会得到更清晰的答案。

其次,通常不会谈论移植二进制文件。 我们移植源代码,可能包括汇编语言以及C或其他语言。 这样做的过程包括编译器选择,在此之后,您可以开始编译,移植,编译和链接新硬件代码的迭代过程。 我省略了许多细节。 再一次,如果你在你的问题中提供了更多的细节,你可能会得到更具体的答案。

第三,正如其他人所说,不,你不能在你提到的场景中使用虚拟化。 你可能会发现可接受的仿真解决方案 如果可以,请再次提供更多细节。

不,虚拟化不是答案。 虚拟化需要您的硬件平台,并创建一个相同硬件的独立“虚拟”机器。 因此,在x86上运行时,可以使用虚拟化来创建第二台x86机器。

要模拟完全不同的硬件体系结构,您需要查看仿真 。

将软件从一种架构移植到另一种架构是多么容易/很难完全取决于软件的写法。 如果它使用某种特定的架构而不是另一种架构(例如,x86可以处理非对齐的内存访问,而SPARC则不),那么您将需要修复这样的事情。 另一个可能导致难以移植的例子是如果软件假定了硬件的特定的endian-ess。

SPARC,IBM PowerPC需要独立的编译器,而不是x86和x86-64目标?

我讨厌这样做,但是鉴于IBM PowerPC和SPARC不支持x86或者x86-64命令集(也就是说完全独立的机器语言),你甚至在哪里得到了兼容的想法呢?

有没有办法使用虚拟化来模拟这些环境?

可能是的,但它会非常慢,因为你将不得不翻译机器代码,或者 – 很好地解释它。 假设CPU架构不同,硬件虚拟化将不起作用。 SPARC和PowerPC不仅仅是“同一个事物的不同标签”,它们在内部是非常不同的。

使用Java或LLVM ,或尝试QEMU来测试其他CPU。

如果你的代码被写成可移植的,那很简单,如果不是这样的话。 不同大小的数据类型,每个平台和依赖于它的代码,内联汇编等都会使其变得更加困难。

LLVM和QEMU的主页: