Lak*_*tha 3 c executable operating-system cross-compiling
如果我在操作系统(例如:Windows)中创建一个 C 可执行文件,该文件是否可以在其他操作系统(例如:Linux、Mac-OS)上运行。
小智 6
试图给出一个完整的答案,这将是一个理论上的“是”和一个非常大的“但是”。
首先要理解:由 C 编译器创建的二进制可执行文件与由编译器为其他语言创建的二进制可执行文件在任何相关方面没有区别。因此,以下内容与 C 无关。
有两个问题。操作系统有不同的文件格式来存储二进制文件(通常由代码、数据等部分组成,还有一些元信息告诉系统将它们放置在哪里,要进行哪些重定位,等等)。然后,操作系统也以某种方式将它们的 API 暴露给二进制文件(对于 Windows,一组系统 DLL)。
事实上,只要处理器架构是一样的,你可能仍然运行在另一个系统上的二进制文件。您只需要一些软件,a.) 知道如何加载 Windows 二进制文件,b.) 将 win32 API 调用转换为目标平台的 API 调用。顺便说一句,这就是葡萄酒的作用。
我只是猜想你从哪里来是读过关于 C 是平台独立的。这是真的,但仅适用于源代码。只要您有可用的 C 编译器,只使用标准 C 的 AC 程序将在任何平台上编译(然后运行)。
不存在“C 可执行文件”这样的东西。AC编译器将C源代码翻译成特定的目标系统。可执行文件的格式将是操作系统指定的格式。因此,如果您使用适用于 Linux 的 C 编译器,它将生成只能在 Linux 上运行的可执行文件。
但是,如果代码是纯标准 C,则可以采用完全相同的源代码并在不同的编译器上针对不同的平台进行编译。也称为程序移植。