在Linux上为不同的平台编译C / C ++源代码

时间:2017-09-10 12:20:58

标签: c++ linux windows operating-system cross-compiling

我已经阅读过有关在Linux上编译C / C ++源代码以在Windows上运行它们的内容。我也尝试过使用MinGW,一切正常。

但是,我不明白为什么我必须在Linux上使用MinGW来制作适用于Windows的二进制文件。是什么让g ++输出无法在Windows上运行?是什么让g ++输出可以在Linux上运行它们?输出文件是否具有不同的结构:标题,数据等,它们只能由特定的操作系统解释?

有人能说清楚吗?如果你们中的任何一个人不仅能解释我的业余爱好者,而且还会对那些对操作系统感兴趣并且想知道这背后的真正意义的人解释我,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

在Linux for Windows上构建二进制文件相当于交叉编译,就像在Android上为Linux构建二进制文件一样。 Windows和Linux机器可能(可能)具有类似的硬件,但它们是非常不同的操作平台。

在平台级别执行的事情,即使像prinf("Hello world")这样简单的事情,平台之间也会有所不同。也就是说,字符呈现给控制台的方式是不同的。对于像fork()这样的调用来说,还有更大的挑战,这些调用并不真正对应于Windows进程管理所做的任何事情。

我相信即使在相同的硬件上,即使程序代码和数据加载到内存中的方式在Windows和Linux之间也是不同的。

没有特别的理由认为为一个平台构建的本机二进制文件将在另一个平台上运行。使用Java,我们已经习惯了编译代码是跨平台的想法,但Java .class文件中的内容不是本机可执行代码 - 我们依靠Java运行时系统来完成在平台级别上正确的事情。使用C / C ++,我们需要构建工具来实现这一点(并且通常还有一些程序员专业知识)。