教你使用Wine在Linux上运行Windows软件

作者: 沈建苗编译 来源: 美国PCWORLD 更新时间:2012/2/7
  有时候免不了要使用Windows应用程序,于是在本教程中,我们将使用Wine教你如何在Linux上顺畅地运行Windows应用程序。  纵然Linux软件品种繁多,但有时候你还是觉得缺少了与Windows版对应的某个应用程序。需要那一个应用程序可能有好多原因,最常见的原因恐怕是Linux不支持某一种文件格式或实际使用的某个应用程序。幸好,有好多办法可以在Linux系统上使用Windows应用程序。下面简要介绍一下最流行的几种方法。双启动、虚拟化与Wine三种方法的比较特性双启动虚拟化Wine需要系统重启是不不需要操作系统许可证是是不需要系统资源尚可比较多比较少应用程序兼容性出色还好(3D游戏及其他要求很高的应用程序可能无法正常运行)尚可应用程序的启动时间很短尚可还好  双启动:如果用这种方法,要创建另一个分区,将Windows安装在上面。然后,一旦你需要运行Windows应用程序,就要重新启动系统,然后启动进入到Windows,使用该应用程序。该方法只建议熟悉给硬盘进行分区的中级用户使用。它还要求你有大量闲置的磁盘空间。  虚拟机:在这种场景下,需要在Linux系统上安装虚拟化软件,比如VMware Workstation或VirtualBox,然后安装Windows作为虚拟机。可以使用该虚拟机来运行Windows应用程序,不需要重启系统。不过,使用虚拟机在内存、处理器和磁盘空间等方面需要大量的系统资源,因为虚拟机需要在一个操作系统里面同时运行另一个功能完备的操作系统。  使用Wine:Wine让你不用重启系统或使用虚拟化软件,就可以运行Windows应用程序。在本教程中,我们将使用Wine在Linux系统上运行Windows应用程序。  Wine的介绍  Wine是Wine Is Not an Emulator(Wine不是模拟器)的缩写,其实是一个转换层(或程序装入器),能够在Linux及与POSIX兼容的其他类似操作系统上运行Windows应用程序。Wine在Linux上无法模拟Windows应用程序,而是提供了另外的方法来实施DLL(典型的Windows应用程序可以调用这些DLL)和代替Windows NT内核的进程。Wine完全由非微软代码组成。  Wine支持数量众多的应用程序,但并非全部都得到同样的支持。可以访问Wine应用数据库(AppDB, http://appdb.winehq.org),看看你常用的Windows应用程序与Wine之间的兼容性有多好。AppDB由社区维护;你也可以添加自己发现的应用程序。AppDB定义了如下几种级别类型:  白金:如果某应用程序在“即开即用”状态下可以顺畅无阻地安装和运行,它可以被评为白金级。Wine配置文件不需要进行更改。  黄金:应用程序与一些DLL覆盖文件、其他设置或第三方软件可以顺畅无阻地协同运行。  白银:就“平常”使用而言,应用程序可以出色地运行。比如说,游戏在单人玩家模式下运行很好,但在多人玩家模式下不行;Windows Media Player作为插件和独立播放器运行很好,但无法处理数字版权管理(DRM)等。  青铜:应用程序可以运行,但存在一些问题,哪怕是平常使用。比如说,游戏无法正确地重新绘图或者用错误的颜色显示字体,速度比平常慢得多,等等。  垃圾:如果应用程序无法用于原本的用途,就会得到这个评级。如果这样,通用软件缺陷跟踪系统Bugzilla中应该至少有一个软件缺陷报告。应用程序无法安装、无法启动,或者就算能启动,也有好多错误,以至于几乎没法使用。  一. 安装Wine  Wine适应于所有流行的UNIX操作系统,包括Ubuntu、Debian、Red Hat、SUSE、Mandriva、FreeBSD、Solaris和Mac OS X。  在Ubuntu上:  1. 打开Applications(应用程序)>Ubuntu Software Center(Unbuntu软件中心),打开Ubuntu软件中心。  2. 然后点击Edit(编辑)>Software Sources(软件源)。选择Other Software(其他软件)选项卡,点击Add(添加)。然后输入下列apt行:  ppa:ubuntu-wine/ppa  3. 从左边的Get Software(取得软件)部分中选择“PPA for Ubuntu Wine Team”,然后选择Microsoft Windows Compatibility Layer(Development files) – wine1.3-dev。点击Install(安装)。这会安装最新的Wine软件包,包括开发库。  提示:卸载现有的Wine软件包,以确保最大的兼容性。另外,如果想干净安装,你可以删除Wine用户目录,为此可以从主目录中使用命令rm -r -v .wine。  二. 安装Wine支持包  现在,我们需要安装非开源(但免费)的支持包。这包括微软Core Fonts、Visual C++运行时环境等软件包。  不妨继续深入介绍。  安装Cabextract:  需要该软件包来解压缩微软.cab文件。  $ sudo apt-get install cabextract  下载winetricks脚本:  现在我们需要下载一个很棒的脚本,名为winetricks,它会自动下载和安装必要的支持包。  $ wget http://winetricks.org/winetricks  现在输入下列命令,安装必要的支持包:  $ sh winetricks corefonts Tahoma  提示:你还可以不用任何命令行参数来运行winetricks,那样就能从漂亮的GUI界面选择需要安装的软件包。  三. 安装微软Office  在本例中,我们将安装微软Office 2007。插入微软Office 2007光盘,鼠标右击setup.exe,选择“Open With Windows Program Loader”。这应该会启动微软Office安装程序。以平常的方式来安装,就像你在任何Windows系统上安装那样。 四. 建立库  鉴于已安装好了微软Office 2007,我们要确保Wine已经过配置,可以顺利使用该应用软件。你也看到,Wine以自己的方法实施了各种Windows库,但我们可以直接使用原生的Windows库,确保应用程序有最大的兼容性。Wine随带自己的配置工具:winecfg。除了其他功能外,该工具还让我们可以在内置版本的库与原生版本的库之间切换。  输入命令winecfg,即可打开Wine配置工具。进入到Libraries(库)选项卡,把riched20和usp10添加到“native, builtin”。这表明,Wine应该先试着装入原生的Windows库;要是没有这些库,它会试着装入内置的库。 五. 运行微软Office  微软Office现在应该已出现在Ubuntu程序菜单中。可以先后进入到Application(应用程序)> Programs(程序)>Microsoft Office(微软Office)来访问它。  这个过程确实相当简单。如果你只想临时运行某个Windows程序,假设兼容性很好,那么全都妥当了;但是高级用户想要再深入一步的话,需要继续读下去。[NextPage] 使用Winelib构建Windows应用程序  如果你想不受微软的约束,Wine确实大有帮助。这年头,连第三方的Windows应用开发人员都要受微软的支配。比如说,Windows多媒体应用开发人员处理最简单的任务都要依赖DirectX。DirectX是微软的专属财产,别人谁也无法访问不了源代码。有一天,微软可能会开发DirectX的一些独特功能,由于这些功能没有列入文档,独立软件开发商访问不了这些功能。那样的话,Windows Media Player将是该平台上最好的多媒体播放器,因为其他播放器被迫依赖DirectX,又无法完全控制它。  欢迎来到Linux社区:在这里,没有什么是不可能的。  不妨再以DirectX为例。Wine以自己的方法实施了DirectX(借助Transgaming Technologies而实现)。Wine实施了常见的多媒体应用编程接口(API),比如Direct3D、DirectInput、DirectSound、DirectShow及其他许多API,实施的办法就是将它们与功能强大的、开放的Linux对应API联系起来,如OpenGL、X11和ALSA/OSS API。因而,将DirectX应用程序移植到Linux时,你可以使用所有这些开放的技术。Winelib可以用作将应用程序从Windows平台取出来放到Linux系统上的第一步。然后,可以逐渐充分利用Linux提供的所有功能。  Winelib能够在Linux上运行和编译Windows应用程序,不需要Windows。Winelib是Wine项目的一部分。它以开源的方式实施了Win32 API,基于Linux和X Window System(如今常称为Xorg)而建。Winelib的代码与Wine完全共享,能够编译控制台应用程序和GUI应用程序。它还能编译DLL(动态链接库)等库文件。Wine通过下列两种方式来处理Windows源代码。提供二进制级的兼容性  二进制级的兼容性可通过Wine本身来获得。在此过程中,应用程序的源代码在Windows平台上编译,然后二进制文件被移到Linux系统上,通过Wine来运行。应用程序在二进制兼容的情况下运行时,它可以使用所有现有的.dll文件。这个过程相当简单,但无法释放Wine子系统的全部功能。这与我们使用Wine来运行微软Office 2007的方式一模一样。提供源码级的兼容性  在该方法中,源代码文件被移到Linux系统上,然后使用GCC对照Winelib库来进行编译。这样一来,应用程序还能够与UNIX API调用兼容,以便充分利用UNIX的全部功能。Winelib随带一款名为winemaker的工具,该工具可以通过VC++项目创建基于GNU标准autoconf的makefile文件。Winemaker是一个Perl脚本,负责处理转换源代码、使源代码专门用于UNIX、清空用例问题及其他众多方面的所有繁重任务。  从理论上来说,将VC++应用程序转换成Linux应用程序需要完成下列步骤:  1. 将VC++项目拷贝到Linux平台上的目录。  2. 进入到上述目录,发出下列命令:  $winemaker -lower-uppercase$./configure -with-wine=/usr/wine/$make  这下大功告成了。现在你可以安装或执行构建的库了。Hello World  我们不妨在常用的Hello World Visual C++应用程序上试一下Winelib:  *--------hello.c ----------*/#include int main(int argc, char** argv) { MessageBox(NULL, “Hello Readers, Welcome to Winelib.”, “Hello”, MB_OK); return 0;}Compiling and executing$ winegcc hello.c -o hello$ ./hello.exe.h> 注意:  需要GCC 4.5用Winelib来构建应用程序。想安装GCC 4.5,输入下列命令:  $ sudo apt-get install gcc-4.5  有了Wine,你就比较容易让常用的Windows应用程序和游戏在Linux上运行。要是某个应用程序现在无法运行,可能需要试试Wine的下一个版本,因为社区在不断开发Wine。如果你是Windows开发人员,Wine让你能够使应用程序在Linux平台上以原生方式出现。