本系列第3篇文章Wine零知识学习3 —— Winetricks介绍及下载和运行讲述了Wentricks的下载及使用。在Winetricks的使用过程中会发现很多应用下载会出现问题,会提示32位程序无法运行在64位系统上。为什么会出现这个问题?又如何解决此问题?这就是本文要讲的内容。

第2篇文章Wine零知识学习2 —— 源码下载、构建与安装详述了Wine的下载及编译安装步骤。实际上那只是几种编译Wine的方式中相对简单的一种。下边列出Wine官网中对于编译Wine的详细说明以及其它几种方法。参考链接为:Building Wine - WineHQ Wiki

方法1. Plain Vanilla Compiling —— 普通编译

如果你打算在与你构建相同的32位架构上运行Wine,那么你是幸运的:事情将会非常简单。

注意:如果你只是想要在具有64位发行版的公共硬件上编译Wine,你需要执行一个WOW64构建(详见下边)。

安装好所有的构建必要条件:

(1)切换到你要编译wine的目录

(2)在那里,调用你(下载并放置)的wine源码目录中的配置脚本

(3)在那之后,在你的构建目录中执行make

(4)如果make成功完成,则你可以使用make install命令安装wine到你的系统中

对应的操作步骤为在命令行中执行如下命令:

cd ~/wine-dirs/wine-build/
../wine-source/configure
make
make install

推测目录结构为:

wine-dirs
    | -- wine-build
    | -- wine-source

最后一步完全由你自行决定:你可以完全在构建路径运行wine而无需安装。如果你通过make安装了wine,请确保你没有其它版本的wine已安装。覆盖安装不会损坏你的系统,但可以使你的库和包管理严重地纠缠在一起。

方法2. 64位编译

If you're on a 64-bit system, all you need to do to build a 64-bit wine is pass --enable-win64 to the configure script when you run the above commands:

如果你在64位系统上运行wine,对于编译64位的wine,你需要做的全部是传递--enable-win64选项到配置脚本,在你运行以上命令时。命令如下:

../wine-source/configure --enable-win64

这样做的问题是,构建本身将只允许运行为在64位Windows上运行而编译的应用程序。由于绝大多数Windows应用是32位的,你很可能要遵循下边的WOW64指导步骤(操作指南)。

方法3. Shared WoW64 —— 共享32位编译

当Windows开始面向64位架构时,微软决定包含一个兼容层以支持他们的大量的32位应用。这种子组件,昵称为WOW64(对于在64位Windows上运行的窗口),也在Wine中被实现了,以解决完全相同的问题。

注意:没带32位支持而构建的64位Wine将无法运行任何32位应用程序,绝大多数的Windows二进制都是32位应用程序。甚至大多数64位程序仍然包含32位部件!

提示:64位Wine已在少数操作系统上正常工作了,但是如果你想帮助将Wine移植到其它AMD64,我们很乐意得到你的帮助。

好消息是一旦你在适当的位置具有了编译32位和64位Wine的依赖,你已经完成了困难的部分。如果你拥有了多功能库的全部依赖或者(在将来的某个好日子)你一道安装了多架构的所有依赖,你只需要按照以下两个步骤进行操作:

(1)首先编译64位版本的Wine带有--enable-win64配置标志,当然,在一个单独的构建目录中

(2)接下来当你构建32位版本时(在一个新的构建目录下再次编译),指向配置到64位构建目录,通过使用--with-wine64=相对路径

对应的操作步骤为在命令行中执行如下命令:

(1)首先编译64位版本的Wine

cd ~/wine-dirs/wine64-build/
../wine-source/configure --enable-win64
make

(2)然后编译32位版本的Wine

cd ~/wine-dirs/wine32-build/
PKG_CONFIG_PATH=/path/to/pkgconfig ../wine-source/configure --with-wine64=../wine64-build
make

推测目录结构为:

wine-dirs
    | -- wine32-build
    | -- wine64-build
    | -- wine-source

PKG_CONFIG_PATH应该指向32位pkgconfig文件的位置,很可能是/usr/lib或/usr/lib32。不带这个参数,配置脚本将使用64位文件并且在32位构建中禁止gstreamer支持。

When you make the 32-bit version of Wine, the build process should inject whatever libraries the 64-bit version needs to handle 32-bit programs. After that, just run wine from the 64-bit build to have WoW64 features.

当你制作32位版本的Wine,构建过程应该注入64位版本处理32位程序所需的任何库。在此之后,只从64位版本构建中运行wine以拥有WoW64特性。