《操作係統真象還原》——0.14 為什麼Linux係統下的應用程序不能在Windows係統下運行
本節書摘來自異步社區《操作係統真象還原》一書中的第0章,第0.14節,作者:鄭鋼著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看
0.14 為什麼Linux係統下的應用程序不能在Windows係統下運行
其實,Windows下的程序也無法直接在Linux下運行。
對於這個問題,很多同學都會馬上給出答案:格式不同。其實……答對啦,確實是格式不同,不過這隻是一方麵,還有另一方麵,係統API不同,API即Application Programming Interface,應用程序編程接口。
先說說格式。其實格式也算是協議,就是在某個固定的位置有固定意義的數據。Linux下的可執行程序格式是elf,也就是 “Executable and Linking Format”平時咱們用readelf命令可以查看elf文件頭,裏麵有節(section)信息、段(segment)信息、程序入口(entry_point)、哪個段由哪些節組成等信息。
而Windows下的可執行程序是PE格式(portable executable,可移植的可執行文件),因為我沒了解過,所以具體文件頭咱們就不關注了,有興趣的同學自行查看。
那如果Linux支持了PE格式就可以運行Wndows程序了嗎?也不行,因為在上麵說過了,還有係統API不同。Linux中的API稱為係統調用,是通過int 0x80這個軟中斷實現的。而Windows中的API是存放在動態鏈接庫文件中的,也就是Windows開發人員常說的DLL,即Dynamic Link Library 的縮寫。LL是一個庫,裏麵包含代碼 和數據,可供用戶程序調用,DLL不是可執行文件 ,不能夠單獨運行。也就是說,Linux中的可執行程序獲得係統資源的方法和Windows不一樣,所以顯然是不能在Windows中運行的。
除以上原因外,這還和編譯器、標準庫有關,不再列舉。
最後更新:2017-06-12 16:31:58