一个C语言可执行文件能在所有操作系统上运行吗?

3

如果我在一个操作系统中(例如:Windows)创建了一个C可执行文件,这个文件能否在其他操作系统上运行(如:Linux、Mac-OS)。


不,可执行文件是针对特定目标平台定制的。如果程序使用特定于平台的功能(如WIN32 API),则甚至无法将源代码编译为其他平台的可执行文件。 - Some programmer dude
2个回答

7

尝试给出一个完整的答案,理论上来说是“可以”,但有一个非常大的“但是”。

首先要明白的是:由C编译器创建的二进制可执行文件与其他语言的编译器创建的文件在任何相关方面都没有区别。所以下面讨论的与C无关。

这涉及到两个问题。操作系统有不同的文件格式来存储二进制文件(通常包括代码、数据等部分以及一些元信息,告诉系统如何放置它们、进行哪些重定位等等)。然后,操作系统以某种方式向二进制文件公开其API(对于Windows而言,是一组系统DLL)。

实际上,只要处理器架构相同,你就可以在另一个系统上运行二进制文件。你只需要一些软件来:a.)知道如何加载Windows二进制文件;b.)将win32 API调用转换为目标平台的API调用。这正是Wine所做的。

我猜测你的出发点是读过C是平台无关的。这是正确的,但只适用于源代码。只要有可用的C编译器,使用纯标准C编写的C程序将编译(然后运行)在任何平台上。


4

“C可执行文件”这个说法是不存在的。C编译器会将C源代码翻译成目标系统所需的格式。可执行文件的格式将与操作系统指定的格式一致。因此,如果你使用Linux的C编译器,它产生的可执行文件只能在Linux系统中运行。

然而,如果代码是纯标准C,你可以使用不同的编译器在不同平台上编译相同的源代码。这也被称为移植程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接