我知道几个在 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。据我了解,这是葡萄酒的主要核心。