单个编译的 C 程序如何在多个体系结构上运行?
How can a single compiled C program run on multiple architectures?
以从某个网站下载的程序为例,可供选择的不同选项是常用的操作系统(Linux、Mac、Windows),但是 CPU 体系结构呢?该程序是二进制可执行文件。它只是假设 amd64 吗?或者程序是否编译到所有支持的体系结构中并与顶部的脚本一起打包,选择正确的?
我只对 C 感兴趣,想知道这是如何实现的。
经过进一步调查,感谢以下个人提供的有用信息,我找到了Fat Binaries with support on both Mac and Linux. It doesn't seem as though windows supports它。
Mac OS X 二进制格式包括一种在同一文件中为多个体系结构提供代码的机制,因此单个 Mac 应用程序可以支持 32 位和 64 位 x86 ;在最近的过去,PowerPC 支持也是可能的,尽管那些现在已经过时了。但是对于 Windows 和 Linux,您通常需要为每个 CPU 体系结构提供单独的二进制文件(正如评论所指出的那样,虽然这与标准做法相去甚远,但可以临时安装类似的东西。 ) 默认的,也是迄今为止最常见的,是 amd64,但有时您仍然会看到针对 32 位机器的单独下载。这方面的世界曾经更有趣,但现在比以往任何时候都更加标准化。
以从某个网站下载的程序为例,可供选择的不同选项是常用的操作系统(Linux、Mac、Windows),但是 CPU 体系结构呢?该程序是二进制可执行文件。它只是假设 amd64 吗?或者程序是否编译到所有支持的体系结构中并与顶部的脚本一起打包,选择正确的?
我只对 C 感兴趣,想知道这是如何实现的。
经过进一步调查,感谢以下个人提供的有用信息,我找到了Fat Binaries with support on both Mac and Linux. It doesn't seem as though windows supports它。
Mac OS X 二进制格式包括一种在同一文件中为多个体系结构提供代码的机制,因此单个 Mac 应用程序可以支持 32 位和 64 位 x86 ;在最近的过去,PowerPC 支持也是可能的,尽管那些现在已经过时了。但是对于 Windows 和 Linux,您通常需要为每个 CPU 体系结构提供单独的二进制文件(正如评论所指出的那样,虽然这与标准做法相去甚远,但可以临时安装类似的东西。 ) 默认的,也是迄今为止最常见的,是 amd64,但有时您仍然会看到针对 32 位机器的单独下载。这方面的世界曾经更有趣,但现在比以往任何时候都更加标准化。