2013-07-20 30 views
2

我知道幾個在linux和Windows之間交叉編譯的項目。本機windows Linux

Wine項目非常適合在Linux內部運行Windows應用程序。

andLinux是在Windows中運行的Linux。

我的問題是,我們可以編譯一個完整的Linux操作系統,以便獲得一個Linux系統與Windows PE可執行文件格式完全兼容,在Windows編譯器(如mingw32的,視覺工作室,...)?

+0

mingw32是一個極簡主義的windows開發環境,Visual Studio是一個IDE。它們不是編譯器。 – lulyon

+0

Linux本身支持ELF,a.out和COFF作爲目標文件格式。我不認爲它支持PE。 – Macmade

+2

@lulyon mingw32包含一個生成PE文件的GCC編譯器版本。 Microsoft visual studio自帶編譯器。在這兩種情況下,人們通常會將這兩者稱爲編譯器,因爲它們都包含一個編譯器。引用爲編譯器時,其中任何一個的含義都不會含糊不清或不明確。 –

回答

3

正如葡萄酒所表明的那樣,PE格式並不是真正的兼容性問題。

PE只定義程序在加載時如何拼接在一起。在windows下,RUNDLL解釋它,將所有程序段加載到內存中,將所有支持的dll加載到內存中,並修補函數指針,這樣就可以在內存中準備好要運行的程序。 (詳見http://msdn.microsoft.com/en-us/library/ms809762.aspx它的一個很好的閱讀!

有很少的停止你編寫一個內核模塊來完成所有這些。通過上面鏈接的頁面中的細節,可能不會很難,而且有人可能已經完成了它。

真正的問題是操作系統的基礎問題。即使Linux可以加載PE,文件名(\或/)與權限模型的不同之處也存在根本性差異,而Linux註冊表中不存在Windows註冊表。那是在您進入圖形用戶界面的不同窗口模型之前。

因此,獲得一個Windows程序在Linux下運行的任務不是關於程序加載器,而更多是關於在Linux下模擬所有的Windows DLL。據我瞭解,這是葡萄酒的主要核心。

+0

+1你的整個問題都很清楚。程序加載器,在Linux下模擬Windows DLL,聽起來就像Cygwin所做的一樣。 – lulyon

+0

您可以讓WINE使用'bin_fmt'運行'.exe'文件。如果設置正確,它將透明加載win32可執行文件,這非常酷。 – rubenvb

+0

@couling,是的。你對Linux源代碼的要求修改是正確的,以便考慮Windows特性,如文件系統,註冊表,設備驅動程序等。但我認爲這些修改對於Linux社區來說並不是很難實現。 「好」的想法是製作一個100%Windows兼容的Linux「克隆」。 – Yazou

相關問題