下载Wine源码
# 如果只是使用wine,就选择下载不带git的wine源码。
wget https://github.com/wine-mirror/wine/archive/refs/heads/master.zip && unzip master.zip && mv wine-master wine
# 如果要回溯wine或者维护补丁,就选择下载带git的wine源码。
# git clone git://source.winehq.org/git/wine.git ~/wine
配置国内源
依赖包括编译依赖和运行依赖。
配置ubuntu20.04清华源:
sudo vim /etc/apt/sources.list.d/1.list
deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
sudo dpkg --add-architecture i386 && sudo apt update
安装依赖
手动安装依赖,以下是编译依赖+64位运行依赖+32位运行依赖:
sudo apt install gcc-multilib g++-multilib flex bison gcc make gcc-mingw-w64 libasound2-dev libpulse-dev libdbus-1-dev libfontconfig1-dev libfreetype6-dev libgnutls28-dev libpng-dev libtiff-dev libunwind-dev libx11-dev libxml2-dev libxslt1-dev libfaudio-dev libgstreamer1.0-dev libmpg123-dev libosmesa6-dev libudev-dev libvkd3d-dev libvulkan-dev libcapi20-dev liblcms2-dev libcups2-dev libgphoto2-dev libsane-dev libgsm1-dev libkrb5-dev libldap2-dev ocl-icd-opencl-dev libpcap-dev libusb-1.0-0-dev libv4l-dev libopenal-dev libasound2-dev:i386 libpulse-dev:i386 libdbus-1-dev:i386 libfontconfig1-dev:i386 libfreetype6-dev:i386 libgnutls28-dev:i386 libpng-dev:i386 libtiff-dev:i386 libunwind-dev:i386 libx11-dev:i386 libxml2-dev:i386 libxslt1-dev:i386 libfaudio-dev:i386 libgstreamer1.0-dev:i386 libgstreamer-plugins-base1.0-dev:i386 libmpg123-dev:i386 libosmesa6-dev:i386 libsdl2-dev:i386 libudev-dev:i386 libvkd3d-dev:i386 libvulkan-dev:i386 libcapi20-dev:i386 liblcms2-dev:i386 libcups2-dev:i386 libgphoto2-dev:i386 libsane-dev:i386 libgsm1-dev:i386 libkrb5-dev:i386 libldap2-dev:i386 ocl-icd-opencl-dev:i386 libpcap-dev:i386 libusb-1.0-0-dev:i386 libv4l-dev:i386 libopenal-dev:i386 libjpeg-turbo8-dev libjpeg-turbo8-dev:i386 libxcomposite-dev libxcomposite-dev:i386 libc6-i386
自动安装依赖,这种方式必须在 sources.list 中指定代码源(deb-src)URI,如果没有 deb-src 源,则使用第一种方法:
sudo apt build-dep wine wine-dev
编译及运行wine
- 如果是使用wine,选择安装到系统目录。
# 编译并安装到系统目录
cd wine
./configure --disable-tests
make -j$(nproc)
sudo make install
# 使用wine运行内置应用notepad。
wine notepad
- 如果是测试wine,选择安装到指定目录。
# 编译并安装到指定目录
mkdir build release
cd build
../wine/configure --disable-tests
make -j$(nproc)
make install DESTDIR=../release
# 使用wine运行内置应用notepad。
../release/usr/local/bin/wine notepad
其他编译选项
编译64位wine
注意:编译64位wine必须先编译32位wine,如果逆序,则无法编译成功,且--enable-win64
只能编译64位不能编译32位。
../wine/configure --disable-tests --enable-win64
# 指定wine64的编译目录
#../wine/configure --disable-tests --with-wine64=../wine64-build
制作自包含依赖
因为源会影响依赖包的安装,所以有时需要制作离线的依赖包,用于编译或运行。
以下方法需要在纯净环境中执行:
sudo apt clean
sudo apt install gcc-multilib g++-multilib gcc make gcc-mingw-w64 \
flex bison libasound2-dev libpulse-dev libdbus-1-dev libfontconfig1-dev libfreetype6-dev libgnutls28-dev libpng-dev libtiff-dev libunwind-dev libx11-dev libxml2-dev libxslt1-dev libfaudio-dev libgstreamer1.0-dev libmpg123-dev libosmesa6-dev libudev-dev libvkd3d-dev libvulkan-dev libcapi20-dev liblcms2-dev libcups2-dev libgphoto2-dev libsane-dev libgsm1-dev libkrb5-dev libldap2-dev ocl-icd-opencl-dev libpcap-dev libusb-1.0-0-dev libv4l-dev libopenal-dev libasound2-dev:i386 libpulse-dev:i386 libdbus-1-dev:i386 libfontconfig1-dev:i386 libfreetype6-dev:i386 libgnutls28-dev:i386 libpng-dev:i386 libtiff-dev:i386 libunwind-dev:i386 libx11-dev:i386 libxml2-dev:i386 libxslt1-dev:i386 libfaudio-dev:i386 libgstreamer1.0-dev:i386 libgstreamer-plugins-base1.0-dev:i386 libmpg123-dev:i386 libosmesa6-dev:i386 libsdl2-dev:i386 libudev-dev:i386 libvkd3d-dev:i386 libvulkan-dev:i386 libcapi20-dev:i386 liblcms2-dev:i386 libcups2-dev:i386 libgphoto2-dev:i386 libsane-dev:i386 libgsm1-dev:i386 libkrb5-dev:i386 libldap2-dev:i386 ocl-icd-opencl-dev:i386 libpcap-dev:i386 libusb-1.0-0-dev:i386 libv4l-dev:i386 libopenal-dev:i386 libjpeg-turbo8-dev libjpeg-turbo8-dev:i386 libxcomposite-dev libxcomposite-dev:i386 libc6-i386
cp -r /var/cache/apt/archives ~
cd archives; rm -rf partial
mkdir ../wine-depends
x=$(ls);for y in $x;do dpkg-deb -x $y ../wine-depends;done
为了不影响系统环境,采用手动添加目录方式来添加库的搜索路径:
export LD_LIBRARY_PATH=<搜索路径>:$LD_LIBRARY_PATH
未完成。
使用ccache缓存编译
ccache会缓存中间文件,加速下一次的编译速度,但是ccache是关联文件夹的,如果再换一个目录编译,则不会再生效:
sudo apt install ccache
export CC="ccache gcc"
关于nproc
nproc
命令会输出当前可用的cpu核数,但是由于一些CPU内核是超线程的,所以虚拟CPU核数的能力达不到真实CPU核数,例如我的机器上nproc
输出12,但我经常使用10核去编译,make -j10
。
卸载wine
make uninstall