且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《操作系统真象还原》——0.14 为什么Linux系统下的应用程序不能在Windows系统下运行

更新时间:2022-05-15 09:06:40

本节书摘来自异步社区《操作系统真象还原》一书中的第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中运行的。

除以上原因外,这还和编译器、标准库有关,不再列举。