.o文件为什么不能跨操作系统? 为什么移动硬盘接入不同的操作系统文件大小不一样?

作者&投稿:军剑 (若有异议请与网页底部的电邮联系)
.o不能跨操作系统是因为使用的编译链不同,而不同的编译链就决定了不同的ASM指令,而机器需要根据汇编指令翻译成机器码,打个比方,在x86的电脑上根据ARM的汇编代码去翻译成机器码,就算翻译不报错,那翻译后的程序和原有的程序已经天差地别了,更别说翻译这一关都不过去。

可执行文件的格式是操作系统定义好的,具体格式是为了实现功能、性能、安全等方便最优化,而不同操作系统(内核)的设计思想是不一样的,就决定了可执行文件不一样。
比如说你用记事本打开任意一个windows下的exe,开头都容易看到这样的字符串“This program cannot be run in DOS mode”,这就是windows版本不能运行在dos操作系统上面,可以设想如果你在dos下运行,dos是可以识别这个exe的最基本结构,但是会立即输出这句话,并停止后续执行。
而linux不可能为了兼容windows下的exe专门做个解析器,那就太消耗性能。linux安装wine就可以模拟运行windows的exe。java的字节码可以跨平台,但那也需要背后虚拟机(非跨平台)的支持,代价就是性能降低。
mac和linux都是类unix系统,它们从一开始目标就是兼容,那么linux和mac的可执行文件,也基本是通用的。
obj是组成exe的部分,道理完全一样。

恰恰是因为机器代码,所以才不能兼容任意平台,反而是高级语言才能跨越操作系统

先不用去考虑CPU兼容性(英特尔或者AMD),看一条C语言最基本代码:

int x = 2;

在8位操作系统上,翻译出的是映射到寄存器值为0000 0010(8位)

在16位操作系统上,映射为0000 0000 0000 0010(16位)

在32位操作系统上,映射为0000 0000 0000 0000 0000 0000 0000 0010 (32位)

在64位操作系统上,虽然还是用32位,但是如果按照速度进行优化,其实最后映射的是64位:

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0010

仅仅从上面一条就可以知道.o文件的机器指令是严格依赖平台而不可能跨界的。

这仅仅是寄存器处理位数上指令差别,其实包括程序段(保存每条指令执行顺序)、堆栈段(确定函数调用顺序)、数据段(变量和文字),以及是否使用内核线程、调用硬件(比如GPU),所有机器指令都是不一样的。正因为这样,我们希望用高级语言,比如C之类,让程序员关注于业务,而不要花太多时间在这些低层次的问题上。



cpu指令??至少我是这样认为的:源码被编译成二进制文件,而这二进制文件内的二进制数据是计算机能识别的;源码可以跨操作系统编译,但编译后的程序就不能了;...

有啊,↖头像

请问操作系统本身是什么格式的文件 是exe 还是o文件~

操作系统是一个庞大的体系,不是单纯几个文件。Windows系统的核心文件主要由exe可执行程序、dll动态链接库、sys驱动文件、ocx控件、ini和inf配置文件,以及注册表文件等各种格式组成。

和文件系统有关,因为不同操作系统的文件系统不一样。文件并不是按字节存储的,而是分扇区、簇存储(一般是按一次读取的字节的多少决定的),不同的文件系统扇区、簇大小不一样。而文件大小并不是扇区、簇的整倍数,所以哪怕只多了一个字节也要占一个扇区、簇。

iqoo z5手机的系统文件data为什么访问受限制?
答:iqoo z5手机的系统文件data访问受限制原因:手机端暂不支持操作,建议可尝试通过数据线连接电脑,开启USB调试,选择管理文件,然后对该文件夹进行操作。经确认该情况是由于谷歌在安卓11的功能上进行了部分更改,所以在对Andriod路径下的“data”,“obb”等目录进行操作时会出现此提示,并非手机异常,手机端...

笔记本电脑的主要部件都有哪些?
答:与CPU直接交换数据的内部存储器,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。简单来说就是一个中转站,所以笔记本运行的越快一般内存也越大。一般为长方形。 6、键盘 键盘大家很熟悉了,就是操作输入的文字数据或者代码之类的。可以说笔记本没有键盘什么都操作不了。 7、鼠标 鼠标的使用是为了使计算机...

如何实现Windows与Linux文件系统互访的解决办法
答:相反的,Windows上面有没有NFS的客户端或者服务端,也有,但是不常用,这里就不详细介绍了。这里主要围绕着Linux上面使用CIFS协议来阐述如何实现两个系统之间的跨文件系统,跨操作系统共享。按照上面的描述,有两种方式来实现共享。Linux分别作为CIFS的服务端和客户端。下面分别就这两种方式来说明操作步骤和简单...

徐工操作系统提示i/o错误112
答:Windows系统出现内存错误 使用Windows操作系统的人有时会遇到这样的错误信息:“0X???指令引用的0x00000000内存,该内存不能written”,然后应用程序被关闭。如果去请教一些“高手”,得到的回答往往是“Windows就是这样不稳定”之类的义愤和不屑。其实,这个错误并不一定是Windows不稳定造成的。本文就来简单分析这种错误的常见...

操作系统原理
答:操作系统为了控制进程和管理资源需要哪些信息呢? >>(1)操作系统的控制结构 为了管理进程和资源,操作系统构造并维护它所管理的每个实体的信息表。 操作系统维护四种不同类型的表:内存、I/O、文件和进程。 内存表「memory tables」用于跟踪内存和外存。内存表必须包括一下信息: 分配给进程的内存 分配给进程的外存 ...

都说汇编是不能跨平台,为什么操作系统就能
答:操作系统在不同平台的汇编不一样啊。 比如同样操作系统要从内存读一段数据,对于不同平台, 有不同的控制指令,寻址指令, 运算指令,返回的寄存器也不同。 要知道不同的体系是有各自风格的机器指令的。操作系统能跨平台是因为有源代码, 可以在不同的体系上编易。 但是操作系统在不同的机器上汇编是...

新手学习AE竟然可以这样学生收藏
答:如何系统的学习AE? 软件版本的选择和电脑的选择 熟悉操作面板 常用快捷键 学习阿婆主 如何学习 1、菜单栏:里面包括文件、编辑、合成、图层、效果、动画、视图、窗口、帮助等,在这些菜单里面含有子菜单。 2、项目栏:主要是对图片、音频、视频等的素材进行管理和导入的区域, 导入素材可以使用快捷键Ctrl+l, 进行导入...

为什么不能把操作系统直接安装到U盘上?
答:在xp系统安装过程中,一个很重要的部分就是根据系统的硬件环境安装驱动程序,比如你在这台电脑上安装的操作系统,u盘拔出来后放到另外一台电脑的话,那是启动不了的,因为主板什么的系统环境都变了,驱动不成功就开机不了 你问题里面说的应该是在同一台电脑吧,那样的话你没有启动成功很可能是因为系统...

蓝屏问题解决方法
答:这个蓝屏通常原因 严重的驱动器碎片、超载的文件I;O、第三方的驱动器镜像软件或者一些防病毒软件出错。如果上述办法均无法解决蓝屏问题.也不能进安全模式下修复.请检修排除硬件故障后.使用系统备份恢复系统或彻底重装操作系统。硬件故障排除开机按DEL键(笔记本按F2键)进BIOS设置光盘或U盘引导电脑进WinPE(需要你有带...

vivo手机如何给mp3传歌?
答:一般情况是不可以给MP3传歌的,若手机有OTG功能可自行尝试。OTG的使用方法:1、打开OTG功能:①Funtouch OS 9.2/iQOO Monster UI及以上:进入手机设置--其他网络与连接--OTG ,将OTG功能打开;②Funtouch OS 9.2以下:进入设置--更多设置--OTG,将OTG功能打开 ;2、将OTG线的一头连接手机的Micro ...