我知道幾個在linux和Windows之間交叉編譯的項目。本機windows Linux
Wine項目非常適合在Linux內部運行Windows應用程序。
andLinux是在Windows中運行的Linux。
我的問題是,我們可以編譯一個完整的Linux操作系統,以便獲得一個Linux系統與Windows PE可執行文件格式完全兼容,在Windows編譯器(如mingw32的,視覺工作室,...)?
我知道幾個在linux和Windows之間交叉編譯的項目。本機windows Linux
Wine項目非常適合在Linux內部運行Windows應用程序。
andLinux是在Windows中運行的Linux。
我的問題是,我們可以編譯一個完整的Linux操作系統,以便獲得一個Linux系統與Windows PE可執行文件格式完全兼容,在Windows編譯器(如mingw32的,視覺工作室,...)?
正如葡萄酒所表明的那樣,PE格式並不是真正的兼容性問題。
PE只定義程序在加載時如何拼接在一起。在windows下,RUNDLL解釋它,將所有程序段加載到內存中,將所有支持的dll加載到內存中,並修補函數指針,這樣就可以在內存中準備好要運行的程序。 (詳見http://msdn.microsoft.com/en-us/library/ms809762.aspx它的一個很好的閱讀!)
有很少的停止你編寫一個內核模塊來完成所有這些。通過上面鏈接的頁面中的細節,可能不會很難,而且有人可能已經完成了它。
真正的問題是操作系統的基礎問題。即使Linux可以加載PE,文件名(\或/)與權限模型的不同之處也存在根本性差異,而Linux註冊表中不存在Windows註冊表。那是在您進入圖形用戶界面的不同窗口模型之前。
因此,獲得一個Windows程序在Linux下運行的任務不是關於程序加載器,而更多是關於在Linux下模擬所有的Windows DLL。據我瞭解,這是葡萄酒的主要核心。
mingw32是一個極簡主義的windows開發環境,Visual Studio是一個IDE。它們不是編譯器。 – lulyon
Linux本身支持ELF,a.out和COFF作爲目標文件格式。我不認爲它支持PE。 – Macmade
@lulyon mingw32包含一個生成PE文件的GCC編譯器版本。 Microsoft visual studio自帶編譯器。在這兩種情況下,人們通常會將這兩者稱爲編譯器,因爲它們都包含一個編譯器。引用爲編譯器時,其中任何一個的含義都不會含糊不清或不明確。 –