
获得徽章 0
赞了这篇文章
评论
1
赞了这篇沸点
为什么程序无法同时在 Linux 和 Windows 下运行?
程序要想运行,必须从外部存储(比如硬盘)加载到内存中,保存在外部存储中的程序叫做「可执行文件」,把可执行文件加载到内存中的过程称为装载,是由装载器实现的。Linux 下的可执行文件使用的是一种叫 ELF(Execuatable and Linkable File Format)的文件格式,中文名叫「可执行与可链接文件格式」,Windows 下的可执行文件使用的是一种叫做 PE(Portable Executable Format)的文件格式。Linux 下的装载器只能解析 ELF 格式,而 Windows 下的装载器只能解析 PE 格式,所以同一个程序无法同时在 Linux 和 Windows 上直接运行。
不能直接运行,但是有间接的方式。比如 Java,通过实现不同平台上的 JVM,然后即时翻译 javac 生成的字节码来做到跨平台。使得程序员无需关心操作系统的差别,做到一次编译,处处运行。
再比如 Linux 下著名的开源项目 Wine,就是通过兼容 PE 格式的装载器,使得我们能直接在 Linux 下运行 Windows 程序的,当然,因为很多程序还依赖各种操作系统本身提供的动态链接库,系统调用等等,需要 Wine 提供对应的实现,兼容格式只是万里长征第一步。而现在微软的 Windows 里面也提供了 WSL(Windows Subsystem for Linux),是在 Windows 下运行的一个 Linux 子系统(有点类似于虚拟机,但是比虚拟机轻量级地多),可以解析和加载 ELF 格式的文件。
程序要想运行,必须从外部存储(比如硬盘)加载到内存中,保存在外部存储中的程序叫做「可执行文件」,把可执行文件加载到内存中的过程称为装载,是由装载器实现的。Linux 下的可执行文件使用的是一种叫 ELF(Execuatable and Linkable File Format)的文件格式,中文名叫「可执行与可链接文件格式」,Windows 下的可执行文件使用的是一种叫做 PE(Portable Executable Format)的文件格式。Linux 下的装载器只能解析 ELF 格式,而 Windows 下的装载器只能解析 PE 格式,所以同一个程序无法同时在 Linux 和 Windows 上直接运行。
不能直接运行,但是有间接的方式。比如 Java,通过实现不同平台上的 JVM,然后即时翻译 javac 生成的字节码来做到跨平台。使得程序员无需关心操作系统的差别,做到一次编译,处处运行。
再比如 Linux 下著名的开源项目 Wine,就是通过兼容 PE 格式的装载器,使得我们能直接在 Linux 下运行 Windows 程序的,当然,因为很多程序还依赖各种操作系统本身提供的动态链接库,系统调用等等,需要 Wine 提供对应的实现,兼容格式只是万里长征第一步。而现在微软的 Windows 里面也提供了 WSL(Windows Subsystem for Linux),是在 Windows 下运行的一个 Linux 子系统(有点类似于虚拟机,但是比虚拟机轻量级地多),可以解析和加载 ELF 格式的文件。
展开
评论
6
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇沸点
【字节跳动】内推!核心团队!大量HC!现在面试年后入职!快快加入吧~
职位:
前端开发工程师 — 抖音商业化
前端开发实习生 — 抖音商业化(可转正)
城市:
北京、上海、杭州
内推链接:
[北京](
jobs.bytedance.com)
[杭州](
jobs.bytedance.com)
[上海](
jobs.bytedance.com)
[上海](
jobs.bytedance.com)
其他职位:[内推链接](
job.toutiao.com)
职位:
城市:
内推链接:
[北京](
[杭州](
[上海](
[上海](
其他职位:[内推链接](
展开
1
4
字节面试经历,春招两次实习面挂了,秋招两次挂了,在第三次秋招补录搭上了末班车,感谢自己当时在boss上没有畏缩主动争取了面试机会,提前来实习了一段时间发现来的是个比较核心的部门,组里的同学也都很nice,工作节奏也比网上流传的轻松很多,大学四年算是可以提前画上一个圆满的句号,不过作为一个前端开发工程师这才刚刚开始。我是双非本科,一路上也是在掘金看了很多大佬的文章从一个一面就挂的菜鸟到两次二面挂,再到最后收到offer。希望掘金的朋友们也要相信自己,keep learning, keep thinking!
展开
10
24