这个使用纯粹未链接的 C stdlib 且为 Linux 编译的 C 程序可以在 Windows 上运行吗?

这个使用纯粹未链接的 C stdlib 且为 Linux 编译的 C 程序可以在 Windows 上运行吗?

问题有点具体,因此假设如下:

  1. 该程序的 C 源代码没有明确使用特定于平台的函数(例如,它没有明确使用系统调用)。
  2. 为了与操作系统交互,源代码使用 C stdlib。
  3. 编译时未链接 stdlib。
  4. 该程序在运行 Linux 的机器上为 Linux 编译,然后移动到另一台运行 Windows 的机器上。
  5. 在 Windows 上执行程序之前,Linux 可执行文件会(以某种方式)转换为与 Windows 兼容的格式。
  6. 两台机器具有相同的硬件。
  7. 两台机器都具有 C stdlib 的实现。

现在问题是:

  1. 考虑到以上所有假设,该程序可以在 Windows 上执行吗?如果不能,为什么?
  2. 如果某个假设不正确,那么原因是什么?

答案1

Windows 和 Linux 上的二进制文件的格式非常不同,因此一个不能在另一个上运行。Linux 共享库与 Windows DLL 完全不同。

跨系统执行可以通过以下方式实现:

  • 针对目标系统重新编译(许多编译器能够在系统 A 上编译并在系统 B 上执行)
  • 在模拟器上运行,例如 葡萄酒、CrossOver 等
  • 在虚拟机、Windows Subsystem for Linux (WSL)、Docker 或类似机器中运行。

答案2

不可以。Linux 的可执行格式与 Windows 不兼容。您必须重新编译该程序以适应 Windows。

或者,您可以在适用于 Linux 的 Windows 子系统或运行 Linux 的虚拟机中本地运行该程序。

相关内容