问题有点具体,因此假设如下:
- 该程序的 C 源代码没有明确使用特定于平台的函数(例如,它没有明确使用系统调用)。
- 为了与操作系统交互,源代码使用 C stdlib。
- 编译时未链接 stdlib。
- 该程序在运行 Linux 的机器上为 Linux 编译,然后移动到另一台运行 Windows 的机器上。
- 在 Windows 上执行程序之前,Linux 可执行文件会(以某种方式)转换为与 Windows 兼容的格式。
- 两台机器具有相同的硬件。
- 两台机器都具有 C stdlib 的实现。
现在问题是:
- 考虑到以上所有假设,该程序可以在 Windows 上执行吗?如果不能,为什么?
- 如果某个假设不正确,那么原因是什么?
答案1
Windows 和 Linux 上的二进制文件的格式非常不同,因此一个不能在另一个上运行。Linux 共享库与 Windows DLL 完全不同。
跨系统执行可以通过以下方式实现:
- 针对目标系统重新编译(许多编译器能够在系统 A 上编译并在系统 B 上执行)
- 在模拟器上运行,例如 葡萄酒、CrossOver 等
- 在虚拟机、Windows Subsystem for Linux (WSL)、Docker 或类似机器中运行。
答案2
不可以。Linux 的可执行格式与 Windows 不兼容。您必须重新编译该程序以适应 Windows。
或者,您可以在适用于 Linux 的 Windows 子系统或运行 Linux 的虚拟机中本地运行该程序。