wine是linux下一款比较出色的运行Windows应用的工具。不过如果我们直接用apt install安装,那么只能安装很旧的版本。在此我想分享一下我编译安装wine的过程。
说在前面的是,wine分为32位和64位,一般我们用的是wine32位,因为大多数Windows程序还是32位的,32位wine只能运行32位应用,64位wine只能运行64位应用。但是我在深度系统64位上发现只能编译64位的wine,因为编译32位wine需要的libfreetype的dev包i386架构是无法在64位deepin上安装的,这样大多数常见Windows程序可能无法运行。因此我在虚拟机开了32位deepin来编译wine32位。大家也可以换其他linux发行版试试。
下面开始吧!
去wine官网下载源码并解压。官方所有版本源码下载 备用地址
编译wine源码必须要安装一些依赖库来执行编译和一些功能软件包来完善wine的功能,否则无法编译。打开终端输入下列命令安装所有必须的依赖包:
sudo apt install flex bison libasound2-dev libpulse-dev libdbus-1-dev libfontconfig1-dev libfreetype6-dev libgnutls28-dev libinotify-ocaml-dev libjpeg-dev libpng-dev libtiff5-dev libunwind-dev libx11-dev libxml2-dev libxslt1-dev libncurses5-dev libgstreamer-plugins-base1.0-dev libmpg123-dev libosmesa6-dev libsdl2-dev libudev-dev libvulkan-dev libcapi20-dev liblcms2-dev libcups2-dev libgphoto2-dev libsane-dev libglu1-mesa-dev libgsm1-dev libgssapi-krb5-2 libkrb5-dev libldap2-dev libnet1-dev ocl-icd-opencl-dev libpcap-dev libusb-1.0-0-dev libv4l-dev libopenal-dev libxcomposite-dev mingw-w64 gcc-multilib g++-multilib
但是在32位linux环境里面编译32位的wine,使用上述命令安装依赖的时候可能会出现如下情况:
这是因为要安装的编译库自己所依赖的软件包的版本不对,可能是即将要被自动安装的依赖包版本太新或者本地计算机上面已经安装的相应的依赖库版本太新。(上图中的libfontconfig1-dev依赖libfontconfig1的2.11.0-6.7+b1版本,libfreetype6-dev依赖libfreetype6的2.6.3-3.2版本 )解决方法也很简单,把上面不对的软件包降级即可。
降级方法:
sudo apt install 包名=指定的包的版本号
那么就上图的情况而言,我就要通过下面的命令把libfontconfig1和libfreetype6分别降级至2.11.0-6.7+b1版本和2.6.3-3.2版本:
sudo apt install libfontconfig1=2.11.0-6.7+b1
sudo apt install libfreetype6=2.6.3-3.2
这样解决了编译库的依赖问题,再执行上述安装编译依赖库的命令即可正常安装所有依赖库了!
---------->
如果你的linux是基于Debian 10及其以上的比较新的版本,你还可以安装libvkd3d-dev这个包(非必须,只是完善wine的功能),再执行以下命令安装:
sudo apt install libvkd3d-dev
然后linux自带的oss(open sound system)版本较老,而wine的编译和运行也会用到新版本的oss(至少v4)(oss也是非必须的,不安装新版本不影响wine的编译和日常运行,但是推荐安装以丰富其功能),我们需要去oss官网下载linux的安装包,对应系统架构(32位还是64位):官方下载地址 备用下载地址
然后使用dpkg -i 命令安装即可。
解压了wine源码之后。用cd命令进入解压后的源码所在文件夹,依次执行:
sudo ./configure
sudo make
如果你要编译64位的wine,就执行:
sudo ./configure --enable-win64
sudo make
然后就开始编译了。编译可能需要一个多小时才能完成,这个时候可以把它挂着,然后品一杯咖啡再回来。
编译完成后,执行下列命令来安装:
sudo make install
或者可以通过下列命令把wine安装至指定位置:
make DESTDIR=要安装到的文件夹(绝对路径) install
这样就完成了整个过程了!输入wine命令即可使用wine。
若使用wine的过程中出现了中文乱码,可参考这个教程:链接
也可以下载宋体字体文件(simsun.ttc)并放到/usr/local/share/wine/fonts目录下。
如果你把wine安装到了别的路径(make install时使用了DESTDIR参数指定了安装目录),则你需要把宋体字体文件放到安装目录/usr/local/share/wine/fonts目录下。
例如我把wine安装到了/home/swsk33/app/wine目录下,则我要把字体放到/home/swsk33/app/wine/usr/local/share/wine/fonts目录下。
wine mono是一款能够在Linux运行.NET程序的插件,在安装wine后,运行wine时会提示你安装。但是wine的自动安装很慢,所以建议去官网下载wine mono程序文件并手动安装。官网文档
先去官网下载地址下载对应版本的wine mono,下载对应版本的msi文件。 wine mono组件备用下载地址
下载msi文件:
需要注意的是,wine版本和wine mono版本必须对应,否则无法使用,对应列表如下:
根据上表,得知我们wine5.11版本必须用wine mono的5.1.0版本才行。
这里以下载5.1.0版本wine mono为例,下载后是一个名为wine-mono-5.1.0-x86.msi的文件。
---------->
这样,wine mono组件就安装完成了!
wine gecko是用于HTML渲染的组件,也是一些应用运行所需要的。这个组件和wine mono安装方式基本相似。我们还是通过下载压缩包离线安装的形式安装。官方文档
还是先去官网下载地址下载msi文件,选择相应的版本。 wine gecko组件备用下载地址
下载msi文件(如果你是wine32位,那么只需要下载x86的文件,如果是wine64位,则需要下载x86_64和x86的两个文件:
和wine mono一样,也需要对应wine版本下载:
以我下载的wine-gecko-2.47.1-x86.msi为例,(如果是64位wine,你需要下载wine-gecko-2.47.1-x86.msi和wine-gecko-2.47.1-x86_64.msi两个文件)。
---------->
这样,wine gecko组件就安装完成了!
安装完wine gecko和wine mono之后,再使用wine就不会提示让你安装这两个组件了!
现在wine的高版本已经可以完美运行qq2020最新版了。不过最近几天研究发现:深度Linux的桌面环境和wine3.x及其以上版本存在兼容性问题,wine3.x版本运行的应用的托盘图标在深度上面点击无响应,以及稍微大型一点的程序常常假死除非打开虚拟桌面。
总结了这几天踩得坑,我个人认为,深度的用户要想正常使用qq,微信,我给出两点建议:
1,不使用官方的wine,而是使用deepin-wine
deepin-wine是深度团队基于wine 2.18版本改造的,更适合于国内软件,深度系统都集成了deepin-wine,无需另外安装。使用方法和wine基本相似。
使用deepin-wine安装qq
先初始化创建并配置wine容器:
deepin-wine winecfg
如果需要自定义wine容器位置执行:
WINEPREFIX=指定wine容器位置(绝对路径) deepin-wine winecfg
在出现的配置页面中,把系统设置成WindowsXP(否则qq会频繁崩溃):
再点击上面的函数库标签页, 再加入riched32和msvcp60函数库,应用:
最后再使用deepin-wine执行qq安装包即可。
打开qq之后建议先不要急着去点,等它头像等数据加载完成再操作,否则可能造成崩溃!
使用deepin-wine安装微信
和安装QQ一样,也是先创建并配置容器,命令同上。
然后百度搜索下载riched20.dll复制到你的容器里面的drive_c/windows/system32文件夹下替换原文件。 riched20备用下载地址
默认容器文件夹是用户文件夹里的.wine,那么就复制到.wine/drive_c/windows/system32文件夹下。
如果使用了WINEPREFIX参数定义了容器位置,那么就进入你定义的容器文件夹里面相应的地方,和上面类似。
然后再次运行配置((自定义容器位置的话记得前面加上WINEPREFIX=...) deepin-wine winecfg),向上面配置QQ的容器一样,设置系统为XP,添加riched32和msvcp60函数库。
再安装即可。
2,使用官方的wine,更换桌面为KDE
毕竟官方最新版wine还是可以运行更多的东西,如果想用官方的wine,建议深度用户换一个桌面环境,我建议换KDE,经测试KDE上面不会出现上述bug。 安装KDE教程
然后安装QQ,微信时和上面deepin-wine的操作基本相同,也是要改容器系统为XP,然后函数库加入msvcp60,riched20和riched32这三个库,安装微信的话必须先下载riched20.dll并替换,操作和上面基本类似,只是命令变成了wine。
新建容器并执行配置:
wine winecfg
如果需要自定义wine容器位置执行:
WINEPREFIX=自定义wine容器的绝对路径 wine winecfg
这样就可以正常使用qq,微信了!
一般来说,前面安装了那些依赖库之后,可以完美运行wine了。但是当你把编译好的wine拷贝到别的机器运行时可能会出现wine因为依赖问题不能运行的情况。
在64位的linux下,使用下列几个命令添加i386架构并安装依赖库即可。
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install lib32z1 libasound2 libasound2:i386 libpulse0 libpulse0:i386 libdbus-1-3 libdbus-1-3:i386 libfontconfig1 libfontconfig1:i386 libfreetype6 libfreetype6:i386 libgnutls30 libgnutls30:i386 libinotify-ocaml libtiff5 libtiff5:i386 libx11-6 libx11-6:i386 libxml2 libxml2:i386 libxslt1.1 libxslt1.1:i386 libncurses5 libncurses5:i386 libgstreamer-plugins-base1.0-0 libgstreamer-plugins-base1.0-0:i386 libmpg123-0 libmpg123-0:i386 libosmesa6 libosmesa6:i386 libsdl2-2.0-0 libsdl2-2.0-0:i386 libudev1 libudev1:i386 libvulkan1 libvulkan1:i386 libcapi20-3 libcapi20-3:i386 liblcms2-2 liblcms2-2:i386 libcups2 libcups2:i386 libgphoto2-6 libgphoto2-6:i386 libsane libsane:i386 libglu1-mesa libglu1-mesa:i386 libgsm1 libgsm1:i386 libgssapi-krb5-2 libgssapi-krb5-2:i386 libkrb5-3 libkrb5-3:i386 libldap-2.4-2 libldap-2.4-2:i386 libnet1 libnet1:i386 ocl-icd-libopencl1 ocl-icd-libopencl1:i386 libpcap0.8 libpcap0.8:i386 libusb-1.0-0 libusb-1.0-0:i386 libv4l-0 libv4l-0:i386 libopenal1 libopenal1:i386 libxcomposite1 libxcomposite1:i386
在32位linux下,直接使用下面的命令安装相应的运行库即可。
sudo apt install libasound2 libpulse0 libdbus-1-3 libfontconfig1 libfreetype6 libgnutls30 libinotify-ocaml libtiff5 libx11-6 libxml2 libxslt1.1 libncurses5 libgstreamer-plugins-base1.0-0 libmpg123-0 libosmesa6 libsdl2-2.0-0 libudev1 libvulkan1 libcapi20-3 liblcms2-2 libcups2 libgphoto2-6 libsane libglu1-mesa libgsm1 libgssapi-krb5-2 libkrb5-3 libldap-2.4-2 libnet1 ocl-icd-libopencl1 libpcap0.8 libusb-1.0-0 libv4l-0 libopenal1 libxcomposite1
这样就可以正常地使用wine了!