閱讀693 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《操作係統真象還原》——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

  上一篇:go  sitemap在網站中還有這些作用
  下一篇:go  海上也能“無現金”,全球最大郵輪公司接入支付寶