wine 这种是怎么实现的呀?

2020-11-26 16:34:36 +08:00
 Macv1994

一直用的 Ubuntu1804 网页版微信也不能用 今天折腾了一下 wine 可以在 Ubuntu 使用 Windows 微信客户端 好他娘神奇啊 这是怎么实现的啊?个人技术水平有限,有咩有懂哥科普一哈。

3182 次点击
所在节点    程序员
14 条回复
forcecharlie
2020-11-26 17:35:31 +08:00
Wine 通常要做到加载 PE 格式可执行文件到内存让其执行,提供 Windows 系统调用供其于系统交互。相同的 CPU 指令集就无需指令翻译了,否则还还涉及到指令集的翻译。
neoblackcap
2020-11-26 17:54:53 +08:00
wine 会重新实现对应 windows 的 win32 api,并能加载 PE 格式的可执行文件,就是这么简单无华但枯燥乏味的原理
cheng6563
2020-11-26 17:54:59 +08:00
模拟了 Windows 的 API,和 WSL1 一个原理
billlee
2020-11-26 21:26:46 +08:00
加载 PE 格式的可执行文件和 DLL, 提供 Windows API 的实现。

其实 linux 下原生的动态连接 ELF 也是由一个用户空间程序 ld.so 来加载的。
outponder
2020-11-26 21:38:31 +08:00
@cheng6563 但是为什么能这么强,有些游戏用 vulkan 重写 dx 的 api 在 linux 性能强过 win
Xusually
2020-11-26 21:50:21 +08:00
Wine Is Not an Emulator
想到这个就是一个字“秀”
Macv1994
2020-11-26 22:31:01 +08:00
@neoblackcap 对我来说 很神奇了 没有深入研究过操作系统层面的知识 唉 太菜了我
neoblackcap
2020-11-27 03:19:27 +08:00
@outponder 跟“API”没有多大关系,跟“重写”很大关系。
稳定的软件,用原来的技术栈重写一样能获得性能提升,实际上不就是调优嘛。
DX12,vulkan,mantle 都是一个技术源头——xbox 360 研发过程。
way2explore2
2020-11-27 05:19:25 +08:00
酵母+糖(多是葡萄)+时间。

有时候还需要木桶。
no1xsyzy
2020-11-27 10:04:23 +08:00
@way2explore2 主要需要无氧环境
似乎葡萄才能出 wine,苹果出 cider,麦芽出 ale…… 之类的,英文环境下会用不同单词区分不同原料的产物
TransAM
2020-11-27 12:45:32 +08:00
由于指令集一样,你需要:

( 1 )将 linux api 封装成 windows api
( 2 )将 pe 适配成 elf
Macv1994
2020-11-27 19:09:20 +08:00
@TransAM 指令集是根据架构决定的 对吧 ?那微信为什么是 deb 包 有点不解
Macv1994
2020-11-27 19:10:05 +08:00
@way2explore2 搁着教我酱酒呢🐶🐶
dyv9
2020-11-28 09:29:03 +08:00
@neoblackcap 你选择理科的原因大概是语文勉强及格,朴实无华“但”枯燥乏味。😁

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/729544

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX