《操作系统真象还原》——0.14 为什么Linux系统下的应用程序不能在Windows系统下运行-阿里云开发者社区

开发者社区> 开发与运维> 正文

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

简介: 先说说格式。其实格式也算是协议,就是在某个固定的位置有固定意义的数据。Linux下的可执行程序格式是elf,也就是 “Executable and Linking Format”平时咱们用readelf命令可以查看elf文件头,里面有节(section)信息、段(segment)信息、程序入口(entry_point)、哪个段由哪些节组成等信息。

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

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章