V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Macv1994
V2EX  ›  程序员

wine 这种是怎么实现的呀?

  •  
  •   Macv1994 ·
    weijiang1994 · 2020-11-26 16:34:36 +08:00 · 3325 次点击
    这是一个创建于 1440 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    ( 1 )将 linux api 封装成 windows api
    ( 2 )将 pe 适配成 elf
    Macv1994
        12
    Macv1994  
    OP
       2020-11-27 19:09:20 +08:00 via Android
    @TransAM 指令集是根据架构决定的 对吧 ?那微信为什么是 deb 包 有点不解
    Macv1994
        13
    Macv1994  
    OP
       2020-11-27 19:10:05 +08:00 via Android
    @way2explore2 搁着教我酱酒呢🐶🐶
    dyv9
        14
    dyv9  
       2020-11-28 09:29:03 +08:00 via Android
    @neoblackcap 你选择理科的原因大概是语文勉强及格,朴实无华“但”枯燥乏味。😁
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5573 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 03:15 · PVG 11:15 · LAX 19:15 · JFK 22:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.