V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Macv1994
V2EX  ›  程序员

wine 这种是怎么实现的呀?

  •  
  •   Macv1994 ·
    weijiang1994 · Nov 26, 2020 · 3974 views
    This topic created in 1984 days ago, the information mentioned may be changed or developed.

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

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

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

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

    ( 1 )将 linux api 封装成 windows api
    ( 2 )将 pe 适配成 elf
    Macv1994
        12
    Macv1994  
    OP
       Nov 27, 2020 via Android
    @TransAM 指令集是根据架构决定的 对吧 ?那微信为什么是 deb 包 有点不解
    Macv1994
        13
    Macv1994  
    OP
       Nov 27, 2020 via Android
    @way2explore2 搁着教我酱酒呢🐶🐶
    dyv9
        14
    dyv9  
       Nov 28, 2020 via Android
    @neoblackcap 你选择理科的原因大概是语文勉强及格,朴实无华“但”枯燥乏味。😁
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   979 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 23:41 · PVG 07:41 · LAX 16:41 · JFK 19:41
    ♥ Do have faith in what you're doing.