天天看点

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

本节书摘来自异步社区《操作系统真象还原》一书中的第0章,第0.14节,作者:郑钢著,更多章节内容可以访问云栖社区“异步社区”公众号查看

其实,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中运行的。

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

继续阅读