关于linux for loongson和wine的一些疑问,请大神解答,谢谢!
linuxdeepin吧
全部回复
仅看楼主
level 8
我不是学计算机专业的,学过C语言,对计算机有一些疑问,可能问题比较幼稚,但也希望有大神能够向我解释一下,谢谢!
1、我们都知道,任何程序都是由高级语言转换成二进制机器码之后CPU才能运行的,那也就是说 Linux for x86 和 Windows for x86 最终编译成的二进制机器码应该是一样的,但是为什么 Windows 的软件不能在 Linux 上运行呢?
2、我们知道Linux已经被龙芯的开发者们移植到了龙芯平台上,但是我看到腾讯有2个版本的QQ,一个是QQ for Linux,另一个是QQ for loongson,这是不是说明了即使是把Linux移植到了龙芯平台上,基于Linux for x86 开发的软件还是不能直接在Linux for loongson上运行的,还要经过重新编译和修改才能在Linux for loongson上运行呢?
3、wine到底是什么?(这个问题我问得有点绕,连我自己也描述不清楚,希望大神耐心解答)
(1)我在百度百科里看到关于wine的描述是:”Wine (Wine Is Not an Emulator)[即Wine不是一个模拟器]是一个在Linux和UNIX之上的,Windows 3.x和 Windows APIs的实现。注意,Wine不是Windows模拟器,而是运用API转换技术实做出Linux对应到Windows相对应的函数来调用DLL以运行Windows程序。“
(2)后来又看到新闻说有中国学者将wine移植到了arm平台上。
这个时候,我就有点蒙了。wine到底是不是模拟器?
(1)如果wine不是模拟器(可能是因为我不太理解所谓的API接口具体指的是什么的缘故),那么wine到底是如何实现在ARM平台上运行Windows的软件的呢?毕竟x86的二进制机器码和ARM的二进制机器码是不一样的,那么wine是如何将Windows的程序翻译成ARM的机器码的?
(2)如果wine是模拟器,那么wine是将x86平台的软件一次性编译成ARM平台的软件,还是像JAVA解释器一样解释一条执行一条呢?还有,如果wine真的是模拟器,那为什么百度百科里会强调wine不是模拟器呢?
2014年10月25日 08点10分 1
level 10
1,请搜索elf和pe。2,需要重新编译,但不仅仅要重新编译,也有些平台相关的还需要改。3,中国学者只不过是把wine重新编译了一下能在arm平台上面运行。
2014年10月25日 10点10分 2
那wine是模拟器吗?不然怎么在linux上走exe?
2014年10月25日 10点10分
@雏鹰的芯愿 如果模拟器的定义是那种必须虚拟出一个完整环境和虚拟机一个性质的,那么wine不是模拟器。
2014年10月25日 10点10分
回复 木何 :那wine如何在linux中走exe?
2014年10月25日 11点10分
回复 木何 :大概说一下原理就行吧,谢谢!
2014年10月25日 11点10分
level 7
1.wine是模拟函数库,因为windows和linux函数库不同,函数会调用失败,程序就无法运行
2.要重新编译
3.wine应该是模拟函数调用的,但是移植到ARM的话那就类似于QEMU虚拟机了
2014年11月16日 01点11分 3
谢谢,还想问一下QEMU虚拟机的工作原理是不是跟VM一样的?
2014年11月23日 06点11分
模拟函数库的话,是不是说比如windows下有一个函数,而linux下没有,而wine的工作就是在linux下做出一个和windows下那个函数具有相同功能的函数,是这个意思吗?
2014年11月29日 03点11分
回复 雏鹰的芯愿 :QEMU应该是模拟CPU,WINDOWS下和LINUX下图形界面函数库完全不同
2015年01月01日 11点01分
回复 雏鹰的芯愿 :但是wine没有实现所有的函数库,因为很多都没有文档
2015年01月01日 11点01分
level 12
简单来说是这样的,编译以后的二进制不是处理器可以执行的二进制,需要操作系统进行转换,并且还调用的有系统的API什么的,如果用编译器产生了最终二进制,必须有单一平台的硬件系统才可以运行,
至少我是这么理解的。
2014年12月12日 01点12分 5
应该是要调用了库
2015年01月01日 11点01分
level 2
1'应用程序格式2'二进制代码编译,参考Apple以前玩过的通用二进制3'Windows程序兼容层(不是模拟器)
2015年02月06日 15点02分 6
level 5
win32 api,dx,这些都是需要平台支持的…不过.net 开源了,会有更多的软件被移植
2015年02月09日 11点02分 7
level 5
普通的二进制程序,必须要经过操作系统的识别,再通过操作系统自身的函数调用来完成的。(不同操作内核系统上,二进制程序存储的数组、可执行部分的位置、调用的系统底层函数不一样。)通过函数库的调用来使用电脑的硬件设备,而普通程序本身无法使用硬件设备。真正能使用设备只有操作系统。
Wine不是Windows模拟器,而是运用API转换技术实做出Linux对应到Windows相对应的函数来调用DLL以运行Windows程序。相当于在windows程序的下面再加装了一个模块,这个模块专门用来转换函数和API接口。
由于linux在ARM上面有移植版的,但是和原来的X86系统上面的函数库和API接口有些小变动(完全没有变动是不可能的),所以需要在ARM上面进行相应的函数库进行适配和改动。
2015年02月16日 01点02分 8
1