Linux下Wine最新版源码编译

6,012 阅读23分钟

Wine是Linux下一款比较出色的运行Windows应用的工具。不过如果我们直接用apt install安装,那么只能安装很旧的版本。在此我想分享一下我编译安装Wine的过程。

说在前面的是,Wine分为32位和64位,一般我们用的是wine32位,因为大多数Windows程序还是32位的,32位Wine只能运行32位应用,64位Wine只能运行64位应用。与此同时还可以编译具有WoW64特性的Wine,也就是既能运行32位应用也可以运行64位应用的,这个在下面会分别讲述。

个人推荐使用Debian 12 64位系统进行编译。

下面开始吧!

1,下载Wine源码并解压

Wine官网下载源码并解压。

image.png

image.png

(1) 版本号说明

需要说明的是,Wine分为稳定版开发版两个版本,开发版通常更新很快,并且带有最新的特性,但是可能会存在一些bug,平时使用建议使用稳定版即可。

我们可以从版本号来区分稳定版和开发版:

  • 稳定版:通常是n.0或者n.0.x,例如9.08.0.2等等
  • 开发版:通常是n.x,例如9.19.28.12等等

大家在官方站下载全部版本源码时,可以看到形如9.x8.xx后缀的文件夹里都是开发版的Wine源码,而形如9.08.0这样以0为后缀的版本号文件夹里都是稳定版的Wine源码:

image.png

(2) 解压说明

上述我们从官网下载的源代码,以及后续下载的部分组件基本上都是tar.xz压缩包格式,在Linux中解压该格式压缩包可通过以下命令:

# 解压当前目录下xxx.tar.xz文件的内容到当前目录下
tar -xJvf ./xxx.tar.xz

# 解压当前目录下xxx.tar.xz文件的内容至./output目录下
tar -xJvf ./xxx.tar.xz -C ./output

本文提供的备用地址基本上都是7z格式,在Linux上解压需要先安装p7zip工具,通过下列命令:

sudo apt install p7zip-full

然后使用7z命令解压:

# 解压当前目录下xxx.7z文件的内容到当前目录下
7z x ./xxx.7z

# 解压当前目录下xxx.7z文件的内容至./output目录下
7z x ./xxx.7z -o./output

注意,-o和指定的目标路径之间没有空格。

2, 安装编译Wine必须的依赖库

(1) 依赖简述

编译Wine源码必须要安装一些依赖库来执行编译和一些功能软件包来完善Wine的功能,否则无法编译。

官方文档的构建部分中,可以看到全部所需依赖的表格,表格中包含了包名、依赖用途等等。其中并不是所有的库都需要,不过能安装的我们可以都安装了,以备不时之需。

(2) 一键安装命令

为了方便起见,这里提供一键安装所有依赖的命令如下,打开终端输入下列命令安装所有必须的依赖包(这里给出Debian 12Ubuntu 22.04的一键安装依赖命令,其它系统大同小异):

① Debian 12 64位

# 加入i386架构体系
sudo dpkg --add-architecture i386
sudo apt update
# 安装必要的编译工具链
sudo apt install flex bison make gcc-multilib gcc-mingw-w64 gettext
# 安装一般需要的依赖
sudo apt install \
	libasound2-dev libasound2-dev:i386 \
	libpulse-dev libpulse-dev:i386 \
	libdbus-1-dev libdbus-1-dev:i386 \
	libfontconfig-dev libfontconfig-dev:i386 \
	libfreetype-dev libfreetype-dev:i386 \
	libgnutls28-dev libgnutls28-dev:i386 \
	libgl-dev libgl-dev:i386 \
	libunwind-dev libunwind-dev:i386 \
	libx11-dev libx11-dev:i386 \
	libxcomposite-dev libxcomposite-dev:i386 \
	libxcursor-dev libxcursor-dev:i386 \
	libxfixes-dev libxfixes-dev:i386 \
	libxi-dev libxi-dev:i386 \
	libxrandr-dev libxrandr-dev:i386 \
	libxrender-dev libxrender-dev:i386 \
	libxext-dev libxext-dev:i386 \
	libwayland-bin \
	libwayland-dev libwayland-dev:i386 \
	libegl-dev libegl-dev:i386 \
	libxkbcommon-dev libxkbcommon-dev:i386 \
	libxkbregistry-dev libxkbregistry-dev:i386
# 安装绝大多数情况需要的依赖
sudo apt install \
	libgstreamer1.0-dev libgstreamer1.0-dev:i386 libgstreamer-plugins-base1.0-dev \
	libosmesa6-dev libosmesa6-dev:i386 \
	libsdl2-dev libsdl2-dev:i386 \
	libudev-dev libudev-dev:i386 \
	libvulkan-dev libvulkan-dev:i386
# 安装许多应用程序需要的依赖
sudo apt install \
	libcapi20-dev libcapi20-dev:i386 \
	libcups2-dev libcups2-dev:i386 \
	libgphoto2-dev libgphoto2-dev:i386 \
	libsane-dev libsane-dev:i386 \
	libkrb5-dev libkrb5-dev:i386 \
	samba-dev samba-dev:i386 \
	ocl-icd-opencl-dev ocl-icd-opencl-dev:i386 \
	libpcap-dev libpcap-dev:i386 \
	libusb-1.0-0-dev libusb-1.0-0-dev:i386 \
	libv4l-dev libv4l-dev:i386

② Ubuntu 22.04 64位

# 加入i386架构体系
sudo dpkg --add-architecture i386
sudo apt update
# 安装必要的编译工具链
sudo apt install flex bison make gcc-multilib gcc-mingw-w64 gettext
# 安装一般需要的依赖
sudo apt install \
	libasound2-dev libasound2-dev:i386 \
	libpulse-dev libpulse-dev:i386 \
	libdbus-1-dev libdbus-1-dev:i386 \
	libfontconfig-dev libfontconfig-dev:i386 \
	libfreetype-dev libfreetype-dev:i386 \
	libgnutls28-dev libgnutls28-dev:i386 \
	libgl-dev libgl-dev:i386 \
	libunwind-dev libunwind-dev:i386 \
	libx11-dev libx11-dev:i386 \
	libxcomposite-dev libxcomposite-dev:i386 \
	libxcursor-dev libxcursor-dev:i386 \
	libxfixes-dev libxfixes-dev:i386 \
	libxi-dev libxi-dev:i386 \
	libxrandr-dev libxrandr-dev:i386 \
	libxrender-dev libxrender-dev:i386 \
	libxext-dev libxext-dev:i386 \
	libwayland-bin \
	libwayland-dev libwayland-dev:i386 \
	libegl-dev libegl-dev:i386 \
	libxkbcommon-dev libxkbcommon-dev:i386 \
	libxkbregistry-dev libxkbregistry-dev:i386
# 安装绝大多数情况需要的依赖
sudo apt install \
	libgstreamer1.0-dev libgstreamer1.0-dev:i386 libgstreamer-plugins-base1.0-dev libgstreamer-plugins-base1.0-dev:i386 \
	libosmesa6-dev libosmesa6-dev:i386 \
	libsdl2-dev libsdl2-dev:i386 \
	libudev-dev libudev-dev:i386 \
	libvulkan-dev libvulkan-dev:i386
# 安装许多应用程序需要的依赖
sudo apt install \
	libcapi20-dev libcapi20-dev:i386 \
	libcups2-dev libcups2-dev:i386 \
	libgphoto2-dev libgphoto2-dev:i386 \
	libsane-dev libsane-dev:i386 \
	libkrb5-dev libkrb5-dev:i386 \
	samba-dev \
	ocl-icd-opencl-dev ocl-icd-opencl-dev:i386 \
	libpcap-dev libpcap-dev:i386 \
	libusb-1.0-0-dev libusb-1.0-0-dev:i386 \
	libv4l-dev libv4l-dev:i386

目前来说,不建议使用Ubuntu 24.04版本的操作系统来编译Wine,因为相关依赖可能破坏系统原有软件包。

大家还可以使用这个Docker镜像,在容器中完成Wine编译:传送门

(3) 常见依赖问题解决

① 依赖版本问题

一些系统安装时可能出现依赖版本问题,例如下列情况:

image.png

这是因为要安装的编译库自己所依赖的软件包的版本不对,可能是即将要被自动安装的依赖包版本太新或者本地计算机上面已经安装的相应的依赖库版本太新。(上图中的libfontconfig1-dev依赖libfontconfig12.11.0-6.7+b1版本,libfreetype6-dev依赖libfreetype62.6.3-3.2版本 )解决方法也很简单,把上面不对的软件包降级即可。

降级方法:

sudo apt install 包名=指定的包的版本号

那么就上图的情况而言,我就要通过下面的命令把libfontconfig1libfreetype6分别降级至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

dpkg错误:Sub-process /usr/bin/dpkg returned an error code (1)

在Ubuntu系统上安装依赖时可能出现如下问题:

image.png

这时先执行下列命令修复:

sudo apt install -f

然后会遇到粘贴 子进程被信号(断开的管道) 终止了的错误信息:

image.png

找到提示错误的安装包路径,进行强行覆盖安装,例如图中是/var/cache/apt/archives/krb5-multidev_1.19.2-2_amd64.deb,则执行命令:

sudo dpkg -i --force-overwrite "/var/cache/apt/archives/krb5-multidev_1.19.2-2_amd64.deb"

然后再执行一次修复依赖命令:

sudo apt install -f

此时软件包就会继续正常安装,等待安装完成即可!

这样解决了编译库的依赖问题,再执行上述安装编译依赖库的命令即可正常安装所有依赖库了!

OSS依赖

然后Linux自带的OSS(Open Sound System)版本较老,而Wine的编译和运行也会用到新版本的OSS(至少V4)(OSS也是非必须的,不安装新版本不影响Wine的编译和日常运行,但是推荐安装以丰富其功能),我们需要去OSS官网下载Linux的安装包,对应系统架构(32位还是64位,根据自己系统位数下载即可,不需要32位和64位的一起安装):

然后使用dpkg -i命令安装即可,安装遇到任何错误也是执行sudo apt install -f修复即可。

3,开始编译源码

需要说在前面的是,Wine即可以编译出单独的32位版本或者64位版本,也可以编译出32和64位兼具的版本(带有WoW64特性的)。单独的32位版本只能运行32位程序,单独的64位版本只能运行64位程序,且单独的32位版本和64位版本的Wine不可以合并共存,没有特殊需求只编译32位版本可以满足大多数需求(毕竟平常大多数程序都是32位的)。

当然编译32位和64位兼具的版本更加强大,因为编译完成的程序已经同时包含了Wine和Wine64,可以运行32位或者64位程序

下面我将分别介绍这两种情况的编译方法,大家根据需求选择其中的一种即可。

(1) 编译32位和64位兼具的Wine(包含WoW64特性)

首先我们建立两个文件夹,并把源码都解压到两个文件夹里,这两个文件夹分别编译32位和64位Wine源码,两个架构我们都需要编译。我这里在同一个目录下创建了wine32wine64两个文件夹,并把源码都解压进去了。

先编译64位Wine,我这里命令行如下:

cd wine64
./configure --enable-win64
make

等待64位的编译完成,再去编译32位的Wine:

cd ../wine32
./configure --with-wine64=../wine64
make

可见编译32位Wine时通过--with-wine64参数指定了已编译完成的Wine 64位的目录,这样编译32位Wine时,程序会注入64位版本处理32位程序所需的库。

通常make编译的过程中会花费很长时间,我们也可以使用-j参数使其多线程编译,例如:

# 使用8线程编译
make -j8

这样可以加快编译速度。

等待全部编译完成之后,分别进入两个文件夹执行安装命令即可(指定了DESTDIR参数指定安装目录的话,两次指定的安装目录必须相同):

# 默认安装
sudo make install
cd ../wine64
sudo make install

# 指定安装目录(两次指定的安装目录必须相同)
# DESTDIR需要指定绝对路径
make DESTDIR=安装目录 install
cd ../wine64
make DESTDIR=安装目录 install

需要注意的是,两个文件夹都make完成后,就不能修改两个文件夹的名称以及它们的相对位置了,否则在make install32位的Wine时会导致找不到64位Wine的文件夹导致make install命令失败。

(2) 编译单独的32/64位版本

解压了Wine源码之后。用cd命令进入解压后的源码所在文件夹,依次执行:

./configure
make

这时默认编译的是32位的Wine。

如果你要编译64位的Wine,就执行:

./configure --enable-win64
make

然后就开始编译了,编译可能需要一个多小时才能完成,这个时候可以把它挂着,然后品一杯咖啡再回来。

编译完成后,执行下列命令来安装:

sudo make install

或者可以通过下列命令把Wine安装至指定位置:

# DESTDIR需要指定绝对路径
make DESTDIR=要安装到的文件夹 install

这样就完成了整个过程了!输入wine命令即可使用Wine。

4,添加中文字体

若使用Wine的过程中出现了中文乱码,可参考这个教程:链接

除此之外,我们也可以下载宋体字体文件simsun.ttc并放到/usr/local/share/wine/fonts目录下,或者从你的Windows的系统字体目录中复制宋体字体或者其它任意一个中文字体出来。

如果你把Wine安装到了别的路径(make install时使用了DESTDIR参数指定了安装目录),则你需要把中文字体文件放到安装目录/usr/local/share/wine/fonts目录下。

例如我把Wine安装到了/home/swsk33/app/wine目录下,则我要把字体放到/home/swsk33/app/wine/usr/local/share/wine/fonts目录下。

5,安装Wine Mono组件

Wine Mono是一款能够在Linux运行.NET程序的插件,在安装Wine后,运行Wine时会提示你安装,但是Wine的自动安装很慢,所以建议去官网下载Wine Mono程序文件并手动安装。

先去官网下载地址下载对应版本的Wine Mono,下载对应版本的tar.xz文件。

Wine Mono组件备用下载地址:传送门

image.png

下载tar.xz文件:

截图 2024-06-13 21-33-32.png

不要下载文件名带有src或者dbg字样的文件,它们分别是源代码和调试信息,我们这里用不到。

需要注意的是,Wine版本和Wine Mono版本必须对应,否则无法使用,对应列表可以在官方文档查看。

Mono的版本最好是和上表Wine版本对应。但是经过我的测试发现,对于某个版本的Mono,安装至比它的对应的Wine版本要高的Wine里面也是可以使用的(Wine向下兼容低版本Mono)。例如5.1.1的Mono对应的是5.19版本的Wine,但是5.1.1版本的Mono安装到6.0版本的Wine里面也可以使用。所以大家可以根据表来选择版本。

以我们今天编译的Wine 9.0版本为例,根据上述规律,必须用Wine Mono的8.1.0版本才行。

这里以8.1.0版本Wine Mono为例,下载后是一个名为wine-mono-8.1.0-x86.tar.xz的文件,解压它会得到一个名为wine-mono-8.1.0的文件夹,我们需要将这个文件夹放到对应的目录中去:

  • 默认安装:如果你在使用make install安装Wine时未指定安装路径,则你需要先在/usr/local/share/wine目录下新建一个名为mono的文件夹,然后把解压得到的wine-mono-8.1.0文件夹放到这个mono文件夹里面即可,即/usr/local/share/wine/mono
  • 指定路径的安装:如果安装时使用DESTDIR参数指定了安装路径,则需要在安装路径的/usr/local/share/wine目录下新建一个名为mono的文件夹,然后把解压得到的wine-mono-8.1.0文件夹放到这个mono文件夹里面即可,即安装路径/usr/local/share/wine/mono

例如我把Wine安装到了/home/swsk33/下载/wine目录下,则我需要在/home/swsk33/下载/wine/usr/local/share/wine目录下新建一个名为mono的文件夹,然后把解压得到的wine-mono-8.1.0文件夹放到/home/swsk33/下载/wine/usr/local/share/wine/mono目录下:

截图 2024-06-13 21-37-47.png

这样,Wine Mono组件就安装完成了!

6,安装Wine Gecko组件

Wine Gecko是用于HTML渲染的组件,也是一些应用运行所需要的,这个组件和Wine Mono安装方式基本类似,我们还是通过下载压缩包离线安装的形式安装。

还是先去官网下载地址下载tar.xz文件,选择相应的版本。

Wine Gecko组件备用下载地址:传送门

image.png

下载tar.xz文件,需要注意的是:

  • 如果你只是编译的单独的32位的Wine,那么只需要下载x86的Gecko压缩包文件
  • 如果你编译的是64位的Wine,或者是带有WoW64特性的Wine,则需要下载x86_64x86这两个Gecko压缩包文件

如下图:

截图 2024-06-13 21-39-25.png

不要下载文件名带有src或者pdb字样的文件,它们分别是源代码和调试信息,我们这里用不到。

和Wine Mono一样,也需要对应Wine版本下载,在官方的文档页面可以查看两者版本对应列表。

以我这里为例,我编译的是Wine 9.0版本,带有WoW64特性的,因此需要下载wine-gecko-2.47.4-x86.tar.xzwine-gecko-2.47.4-x86_64.tar.xz两个文件,将它们解压得到wine-gecko-2.47.4-x86wine-gecko-2.47.4-x86_64这两个文件夹,对于不同的安装情况,我们需要将这两个文件夹放到对应目录:

  • 默认安装:如果你在使用make install安装Wine时未指定安装路径,则需要先在/usr/local/share/wine目录下新建一个名为gecko的文件夹,然后把解压得到的wine-gecko-2.47.4-x86wine-gecko-2.47.4-x86_64这两个文件夹放到这个gecko文件夹里面即可,即/usr/local/share/wine/gecko目录下
  • 指定路径的安装:如果安装时使用DESTDIR参数指定了安装路径,则需要在安装路径/usr/local/share/wine目录下新建一个名为gecko的文件夹,然后把解压得到的wine-gecko-2.47.4-x86wine-gecko-2.47.4-x86_64这两个文件夹放到这个gecko文件夹里面即可,即安装路径/usr/local/share/wine/gecko目录下
  • 仅32位的版本:如果你仅仅是编译的32位的Wine,则只需要将解压得到的wine-gecko-2.47.4-x86文件夹放到/usr/local/share/wine/gecko或者安装目录/usr/local/share/wine/gecko目录下即可

例如我把Wine安装到了/home/swsk33/下载/wine目录下,则我需要在/home/swsk33/下载/wine/usr/local/share/wine目录下新建一个名为gecko的文件夹,然后把解压得到的wine-gecko-2.47.4-x86wine-gecko-2.47.4-x86_64这两个文件夹放到/home/swsk33/下载/wine/usr/local/share/wine/gecko目录下:

截图 2024-06-13 21-47-34.png

这样,Wine Gecko组件就安装完成了!

安装完Wine Gecko和Wine Mono之后,再使用Wine就不会提示让你安装这两个组件了!

7,深度系统安装QQ,微信注意事项

现在Wine的高版本已经可以完美运行qq2020最新版了。不过最近几天研究发现:深度Linux的桌面环境和wine3.x及其以上版本存在兼容性问题,wine3.x版本运行的应用的托盘图标在深度上面点击无响应,以及稍微大型一点的程序常常假死除非打开虚拟桌面。

总结了这几天踩得坑,我个人认为,深度的用户要想正常使用qq,微信,我给出两点建议:

(1) 不使用官方的Wine,而是使用Deepin-Wine

Deepin-Wine是深度团队基于Wine 2.18版本改造的,更适合于国内软件,深度系统都集成了Deepin-Wine,无需另外安装。使用方法和Wine基本相似。

① QQ

先初始化创建并配置Wine容器:

deepin-wine winecfg

如果需要自定义Wine容器位置执行:

# WINEPREFIX需要是绝对路径
WINEPREFIX=指定Wine容器位置 deepin-wine winecfg

在出现的配置页面中,把系统设置成Windows XP(否则QQ会频繁崩溃,新版本QQ也可以不配置):

image.png

再点击上面的函数库标签页,在新增函数库顶替加入riched20riched32msvcp60函数库,添加,应用:

image.png

最后再使用deepin-wine命令执行QQ安装包即可。

打开QQ之后建议先不要急着去点,等它头像等数据加载完成再操作,否则可能造成崩溃!

② 微信

现在Deepin 20可以安装deepin-wine5,通过apt install安装即可。建议新版deepin使用deepin-wine5可以更好地适配微信。

和安装QQ一样,也是先创建并配置容器,命令同上。

然后在dll-files搜索riched20.dllriched32.dll下载,下载32位的。

DLL备用下载地址:传送门

下载后把riched20.dllriched32.dll复制到Wine容器位置/drive_c/windows/system32目录下覆盖原文件。

默认容器文件夹是用户文件夹里的.wine,那么就复制到用户目录/.wine/drive_c/windows/system32文件夹下。

如果使用了WINEPREFIX参数定义了容器位置,那么就进入你定义的容器文件夹里面相应的地方,和上面类似。

然后再次运行配置(deepin-wine winecfg,自定义容器位置的话记得前面加上WINEPREFIX=...),像上面配置QQ的容器一样,设置系统为XP,添加riched20riched32msvcp60函数库。

再安装即可。

(2) 使用官方的Wine,更换桌面为KDE

毕竟官方最新版Wine还是可以运行更多的东西,如果想用官方的Wine,建议深度用户换一个桌面环境,我建议换KDE,经测试KDE上面不会出现上述bug。安装KDE教程可以看我Linux专栏里面安装KDE的教程。

① QQ和微信

安装QQ,微信时和上面deepin-Wine的操作基本类似,只是命令变成了wine

新建容器并执行配置:

wine winecfg

如果需要自定义Wine容器位置执行:

WINEPREFIX=自定义Wine容器的绝对路径 wine winecfg

然后修改容器系统为XP(新版本这个不改也可以)。

然后函数库加入msvcp60riched20riched32这三个库,安装微信的话必须先下载riched20.dllriched32.dll并替换,这里操作和上面deepin-wine的操作一样。

然后再在函数库加入txplatform.exentoskrnl.exe,并在下面已有的函数库顶替列表中,分别选中这两者-编辑-停用-确定:

2022-04-07 09-39-01屏幕截图.png

2022-04-07 09-39-26屏幕截图.png

配置的函数库最终如下图:

image.png

这样就可以正常使用QQ,微信了!

② TIM

安装TIM之前的配置和上述也一样,和微信一样,TIM安装之前也需要下载原生的dll文件(riched20.dllriched32.dll)并替换,但是TIM启动一次后,很容易出现第二次无法启动的情况,这通常是进程残留导致,可以先杀掉TIM的残留进程,执行命令:

kill -9 $(pidof TIM.exe)

再启动就好了!

8,Wine编译完成后无法运行的问题

一般来说,前面安装了那些依赖库之后,可以完美运行Wine了。但是当你把编译好的Wine拷贝到别的机器运行时可能会出现Wine因为依赖问题不能运行的情况。

在64位的Linux下,使用下列几个命令添加i386架构并安装依赖库即可。

一键安装命令如下:

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install lib32z1 libc6 libc6:i386 \
	libasound2 libasound2:i386 \
	libpulse0 libpulse0:i386 \
	libdbus-1-3 libdbus-1-3:i386 \
	libfontconfig1 libfontconfig1:i386 \
	libfreetype6 libfreetype6:i386 \
	libgnutls30 libgnutls30:i386 \
	libgl1 libgl1:i386 \
	libunwind8 libunwind8:i386 \
	libx11-6 libx11-6:i386 \
	libxcomposite1 libxcomposite1:i386 \
	libxcursor1 libxcursor1:i386 \
	libxfixes3 libxfixes3:i386 \
	libxi6 libxi6:i386 \
	libxrandr2 libxrandr2:i386 \
	libxrender1 libxrender1:i386 \
	libxext6 libxext6:i386 \
	libwayland-client0 libwayland-client0:i386 libwayland-cursor0 libwayland-cursor0:i386 libwayland-egl1 libwayland-egl1:i386 libwayland-server0 libwayland-server0:i386 \
	libegl1 libegl1:i386 \
	libxkbcommon0 libxkbcommon0:i386 \
	libxkbregistry0 libxkbregistry0:i386 \
	libgstreamer1.0-0 libgstreamer1.0-0:i386 libgstreamer-plugins-base1.0-0 libgstreamer-plugins-base1.0-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 \
	libcups2 libcups2:i386 \
	libgphoto2-6 libgphoto2-6:i386 \
	libsane1 libsane1:i386 \
	libkrb5-3 libkrb5-3:i386 \
	samba-libs samba-libs: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

如果Ubuntu系统上提示依赖冲突,则去掉上述samba-libs:i386软件包再试。

这样就可以正常地使用Wine了!

9,Wine命令的常见变量参数

刚刚安装完Wine后在终端输入:

winecfg

即可初始化一个Wine容器,Wine容器可以理解为一个极小的Windows系统环境,默认容器被创建于用户文件夹的.wine文件夹下。

后续使用winecfg可以打开默认位置容器的设置面板。

(1) 指定容器位置

Wine的所有命令前面都可以加上变量,例如我们想指定Wine容器的位置,使用WINEPREFIX变量即可:

WINEPREFIX=/home/swsk33/wineapp winecfg

注意WINEPREFIX变量必须是绝对路径。前面指定这个变量,执行winewinecfg等等命令时都会以你指定的文件夹为容器,Windows应用也会被安装进去,容器文件夹不存在会自动创建,因此我们常常通过上述命令指定一个位置初始化一个Wine容器并设定。

(2) 指定容器架构

容器也分为32位和64位的,wine 6.10及其以上版本默认会创建64位容器,而低版本默认创建32位容器。如果你的应用是32位的那么还是建议创建32位容器。使用WINEARCH变量指定容器的架构:

# 创建32位容器
WINEARCH=win32 winecfg

# 创建64位容器
WINEARCH=win64 winecfg

如果说容器已经存在且你指定的WINEARCH和它本身架构不匹配,那么就会出错,所以建议仅仅是第一次创建初始化容器时使用WINEARCH变量指定架构。

(3) 指定日志级别

与此同时,我们在终端使用Wine运行程序时会发现它在不停输出调试信息,但是平时我们并不需要,为了减少资源浪费我们可以使用WINEDEBUG变量设定其调试级别为最低:

WINEDEBUG=-all wine app.exe

可见指定其为-all即可。

这是几个常见的变量,他们其实可以组合同时使用,例如:

# 指定容器路径为/home/swsk33/wineapp文件夹,指定其架构为32位,并设定为最小调试信息
WINEPREFIX=/home/swsk33/wineapp WINEARCH=win32 WINEDEBUG=-all winecfg

10,官方文档

其实我觉得Wine的官方文档真的写的非常好,很详细易懂,这里给出我参考的所有官方文档列表,大家也可以作为参考:

  • Wine Documentation(Wine文档首页):传送门
  • Building Wine(编译构建Wine):传送门
  • Mono(Wine Mono的使用):传送门
  • Gecko(Wine Gecko的使用):传送门
  • Winetricks(winetricks脚本使用):传送门