linux - native Windows Linux

标签 linux windows mingw portable-executable

我知道几个linux和windows交叉编译的项目。

Wine项目非常适合在 Linux 中运行 Windows 应用程序。

andLinux是在 Windows 中运行的 linux。

我的问题是,我们能否使用 Windows 编译器(如 mingw32、visual studio 等)编译完整的 linux 操作系统,以获得与 Windows PE 可执行格式完全兼容的 linux 系统?

最佳答案

正如 wine 所展示的,PE 格式并不是真正的兼容性问题。

PE 只定义了程序在加载时是如何拼凑起来的。在 windows 下,RUNDLL 解释它,将所有程序部分加载到内存,将所有支持的 dll 加载到内存并修补函数指针,以便程序位于内存中准备运行。 (有关更多详细信息,请参阅 http://msdn.microsoft.com/en-us/library/ms809762.aspx这是一本好书!)

几乎没有什么能阻止您编写内核模块来完成所有这些工作。根据上面链接页面中的详细信息,这可能并不难,而且有人可能已经做到了。

真正的问题是操作系统的基础知识。即使 linux 可以加载 PE,也会存在文件名(\或/)的根本差异以及不同的权限模型和 linux 下不存在的 Windows 注册表方面的问题。那是在您进入 GUI 的不同窗口模型之前。

因此,让 Windows 程序在 Linux 下运行的任务与其说是程序加载器,不如说是在 Linux 下模拟所有 Windows DLL。据我了解,这是 Wine 的主要核心。

关于linux - native Windows Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17762550/

相关文章:

c++ - 代码::具有 MinGW 链接的 block 失败

linux - 无法跟踪 sudo;报告有效 uid 为非零

linux - 从 makefile 执行复杂的 shell 命令

c# - 获取线程的可见窗口的标题

windows - Internet Explorer 忽略 flash mms.cfg 设置

c# - 如何在用户注销或关闭 Windows 时延迟关闭应用程序?

linux - awk 找到第一个匹配项,而不是所有匹配项

php - 在 PHP 中从数组创建 .tar 文件

c - MinGW GCC - 未定义对 `atexit' 的引用

c - 在 MinGW 32 位上确定 C 中的 64 位文件大小