新闻资讯
看你所看,想你所想

wine(兼容层)

wine(兼容层)

wine(兼容层)

Wine (“Wine Is Not an Emulator” 的递归缩写)是一个能够在多种 POSIX-compliant 作业系统(诸如 Linux,Mac OSX 及 BSD 等)上运行 Windows 套用的兼容层。另外英语单词wine是葡萄酒的意思。

Wine (Wine Is Not an Emulator)[即Wine不是一个模拟器]是一个在Linux和UNIX之上的,Windows 3.x和 Windows APIs的实现。注意,Wine不是Windows模拟器,而是运用API转换技术实做出Linux对应到Windows相对应的函式来调用DLL以运行Windows程式。Wine可以工作在绝大多数的UNIX版本下,包括Linux, FreeBSD, 和 Solaris。另外,也有适用于Mac OS X的Wine程式。Wine不需要Microsoft Windows, 因为这是一个完全由百分之百的免费代码组成的。如果有可利用的副本的话,它也可以随意地使用本地系统的DLLs。Wine的发布是完全公开原始码的,并且是免费发行的。(基于LGPL发布:GNU宽通用公共许可证)

关于Wine的真正含义,有人对“Wine Is Not an Emulator”的说法表示质疑,认为”非模拟器“的解释不过是一种娱乐性的说法,Wine的真实意思应当是是Windows Environment的缩写,即WinE。

基本介绍

  • 外文名:Wine Is Not an Emulator (Windows Environment)
  • 语言:英文
  • 运行系统:Linux/FreeBSD/Solaris
  • 运作机理:调用DLL以运行Windows程式
  • 公开属性:原始码完全公开,免费发行

版本

可提供下载的一共有三个版本:
Stable branch
稳定版(推荐)
Development branch
开发版
Staging branch
发行版
版本版本类型发布日期开源实现DLL开源实现API
1.0
稳定版
2008-05-27
266个
45个
1.2
稳定版
2010-07-16
368个
58个
1.4
稳定版
2012-03-07
427个
74个
1.6
稳定版
2013-07-18
464个
79个
1.7
开发版
2013-08-02
1.9.17
开发版
2016-08-07
1.8.4
稳定版
2016-08-24
1.8.7
发行版
2017-02-28
2.3
发行版
2017-03-03
2.4
发行版
2017-03-17

其他版本

虽然可运行大部份视窗程式,但只能有限度地运行以DirectX所编写的游戏,亦即是很多游戏不能在其运行
Wine的延伸计画主要有两大产品,一个是CodeWeavers开发的CrossOver,另一个是TransGaming Technologies的Cedega。
CrossOver Office以提供套用软体支持为主,Cedega则锁定在游戏娱乐方面。CodeWeavers和Wine计画一直保有密切的合作关係。CodeWeavers亦雇用了Alexandre Juillard以将CrossOver Office的原始码回馈给Wine。在2005年6月22日,CodeWeavers 宣布支持基于英特尔处理器的苹果电脑。
Transgaming的Cedega则是商业软体,以Wine为基础,在Wine更换授权后停止使用Wine的原始码,虽然有Cedega提供原始码下载(经由CVS),但在不包含专利技术的情形下,功能与可用性都不高。

早期发展

Wine计画是在1993年由Bob Amstadt及Eric Youngdale发起的,最初的目的是为了使16位的视窗3.1的程式可以在Linux上运行,但现在已将目的变为使32位的视窗程式在Linux上运行。
Wine虽然是为Linux而制,但亦能支持FreeBSD、Mac OS X(Intel版) 与Solaris-x86。
因为Windows的DLLs是封闭原始码的,所以程式设计师只能由最底层的设计开始,耗费大量的时间来编写和测试,最后达至兼容。但这个过程往往会有很多困难,而且亦可能会出现很多错误。
当Corel参加这个计画后,Wine很快便能兼容WordPerfect Office,但Corel后来停止了支持这个计画。

编译安装

(所有Linux发行版适用)
确保你的Linux上已经安装了gcc编译器。
如果你安装了编译所需要的软体(如 gcc flex bison fontforge ),就可以进行编译了。
首先,访问官方网站下载最新版本的 Wine,解压到一个目录
打开终端("Terminal"),输入以下命令:
cd <你解压的目录> #进入目录
./configure           # 检查编译环境make                  #若上一步成功的话,即可进行编译make install          #安装
即可完成 Wine 的编译。
▲注意:
1.编译Wine一般需要一个小时(视机器性能而定),若你是刚刚接触 Linux 不久的人,最好不要进行编译。
2.编译安装出现问题,多半是软体依赖没有安装,请留意输出的错误信息。
3.建议能用软体包(如.deb)安装的就儘量别用源码编译安装了,用软体包安装的可以通过包管理器进行版本管理,便于及时更新WIne,编译安装的就得靠你自己了(尤其是你装了开发版本(Development branch)的Wine,不及时更新可能会有很多bug)

下载安装

若你使用 Debian 或者 Ubuntu 之类的发行版,只需要一个命令即可完成安装:
sudo apt-get install wine
请注意:由这种方法安装的Wine通常不是最新版本。要获取最新版,请使用由官方网站上下载安装包、添加ppa源(针对Ubuntu用户)等方法或直接编译安装。
若你使用的为其他发行版,请访问官方网站下载区查询安装方法
这里介绍Wine官方给出的在Ubuntu环境下的安装方法:
#如果你使用的是64位Ubuntu,则先要开启32位安装环境:sudo dpkg --add-architecture i386#然后需要下载一个PGP公钥以识别软体仓库:wget -nc https://dl.winehq.org/wine-builds/Release.key#添加公钥并添加软体源:sudo apt-key add Release.keysudo apt-add-repository https://dl.winehq.org/wine-builds/ubuntu/#更新软体列表sudo apt-get update#之后就可以选择Wine版本安装了:#稳定版(Stable branch)安装命令sudo apt-get install --install-recommends winehq-stable#开发版(Development branch)安装命令sudo apt-get install --install-recommends winehq-devel#发布版(Staging branch)安装命令sudo apt-get install --install-recommends winehq-staging

配置

安装后在终端运行命令(不需要root许可权
   winecfg
运行后会让你安装一些必要外挂程式,确认即可。
之后弹出的视窗里面有详尽的配置。
wine(兼容层)
注意:Wine 1.1.27以上版本的 winecfg 已经是中文界面了。
最新版本的Wine已经可以模拟Windows 10的环境了

中文乱码

Wine 1.1.4 以上版本的中文支持得到了极大改善。如果您在使用较低版本的WINE或者对WINE的中文支持不满意,可以把下面文字保存为 zh.reg 档案,运行 wine regedit 导入它即可
REGEDIT4[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]"Arial"="WenQuanYi Zenhei""Arial CE,238"="WenQuanYi Zenhei""Arial CYR,204"="WenQuanYi Zenhei""Arial Greek,161"="WenQuanYi Zenhei""Arial TUR,162"="WenQuanYi Zenhei""Courier New"="WenQuanYi Zenhei""Courier New CE,238"="WenQuanYi Zenhei""Courier New CYR,204"="WenQuanYi Zenhei""Courier New Greek,161"="WenQuanYi Zenhei""Courier New TUR,162"="WenQuanYi Zenhei""FixedSys"="WenQuanYi Zenhei""Helv"="WenQuanYi Zenhei""Helvetica"="WenQuanYi Zenhei""MS Sans Serif"="WenQuanYi Zenhei""MS Shell Dlg"="WenQuanYi Zenhei""MS Shell Dlg 2"="WenQuanYi Zenhei""System"="WenQuanYi Zenhei""Tahoma"="WenQuanYi Zenhei""Times"="WenQuanYi Zenhei""Times New Roman CE,238"="WenQuanYi Zenhei""Times New Roman CYR,204"="WenQuanYi Zenhei""Times New Roman Greek,161"="WenQuanYi Zenhei""Times New Roman TUR,162"="WenQuanYi Zenhei""Tms Rmn"="WenQuanYi Zenhei"#字型的添加路径(只留一个你想要显示的中文字型在这):~/.wine/drive_c/windows/Fonts/

简单方法

Wine可以在绝大多数的Unix/Linux版本下工作,但其现在仍不能完全运行所有的Windows程式。不过由于几乎每个月都有新版本,越来越多的Windows程式已经能在Wine的帮助下在Linux中运行。
1、直接运行程式
使用命令 wine
[root@localhost root]#wine <程式名>
2、使用程式管理器
[root@localhost root]#progman
启动管理器视窗,从选单中选择 档案(F)-执行(X),就会弹出一个目录浏览器,选择程式即可。
3、直接双击 EXE 程式
一些发行版安装WINE时会自动关联EXE程式,这样直接双击可以运行。
某些简单程式可直接运行,而不需要安装。大部分Windows软体的安装,请由Wine打开安装包(exe档案)然后和Windows下以同样的方法安装程式即可。这样安装的程式应当会在桌面环境的程式列表中自动添加捷径(和Windows下的捷径类似),选择即可运行程式。
单击右键,选择打开方式也可以选择Wine打开。
▲注意:Wine运行某些程式,如MS Office、迅雷、QQ、某些游戏等的兼容性仍不完善。要正常使用此类软体,可以以完全的虚拟机代替(如Virtualbox、VMWare),或者在网上搜寻查找已知的解决方法或针对特定软体的安装包。

可用性

可以做什幺

本文中,我们讨论的是 Wine 在纯 Linux 上的安装,没有任何 Windows 分区。
1. Windows执行档:
Wine 完全支持 Windows执行档( .exe 和 DLL)的二进制载入。
2. DLL:
Wine 有几百个 Windows DLL 的内部实现 -- 不过,其中没有多少是完全的实现。例如,包含有用户界面相关函式的 userd32.dll 在开放原始码的 Wine 中实现了 92%。
3. COM:
这是一种几乎被所有的大型 Windows应用程式所使用的 Windows 技术,它支持诸如将一个 Excel 电子数据表嵌入到 Word 文档中等功能。这一技术得到了 Wine 的很好的支持。
4. 注册表:
这是另一个几乎任何一个 Windows应用程式都会使用的关键技术,Wine 实现了大约 90% 的 Windows 注册表管理 API。
5. 核心功能:
核心繫统功能也得到了特别好的支持。如前面提到的,儘管 Linux 和 Windows 之间存在区别,但是基本的层次上还有很多类似之处,因此与进程、执行绪、档案和讯息伫列相关的核心繫统 API 得到了近乎完美的支持。
6. 音频和视频:
Wine 支持 Windows 音频和视频档案的运行(还可以使用 Windows媒体播放器)。
7. 列印:
也得到了支持,可以从一个在 Wine 中运行的 Windows应用程式进行列印。
8. ODBC:
Wine 支持那些需要通过 ODBC 访问资料库的 Windows 应用程式。
9. 调试:
Wine 有一个非常健壮和强大的内置调试器,除了支持标準的调试功能外,它还为调试运行于 Linux 上的 Windows 二进制程式进行了定製。它是 Wine 为其开发者提供的最重要工具之一。Wine 还有一个设计完备的追蹤和记录日誌的模组,可以帮助调试。我们之所以强调这一点,原因在于,儘管框架是健壮的,但是,当在 Wine 中安装和运行 Windows应用程式时有很多不确定因素,在使用开放原始码的 Wine 时迟早会停下来进行调试。

不能做什幺

不幸的是,很多用户发现 Wine 难于使用。诚然,在 Linux 上使用类似于 MS Office 这样的应用程式可能是困难的;在这里我们来看一些原因,为什幺确实是这样。在开始之前,我们应该指出,CodeWeavers 提供的商用 Wine (CrossOver)已经解决了大部分此类问题(参阅参考资料以获得连结)。假以时日,这些问题将可能在开放原始码的 Wine 中同样得到解决。
1. 使用命令行(早期版本)
与大部分 Linux 中的应用程式一样,在开发早期 Wine 必须在命令行中安装。用户必须回到命令行中来在 Wine 下运行应用程式。例如,要运行Internet Explorer,用户通常需要在 shell 中输入 wine IEXPLORE.EXE 。儘管经验丰富的用户喜欢这样做,但初学者会发现这比较困难,而且不太可能懂得起别名等捷径。不过,在较新的版本中用户也可以直接双击EXE档案运行(如果进行了关联)。儘管这样会给查看错误信息带来困难,但这无疑极大地方便了用户的使用。
2. 配置
Wine 的配置较为複杂。除了命令行,较新的版本已经有了简体中文的界面,对于初学者来说,配置简单了不少。
3. 取消对隐藏档案的隐藏
如果挂载 CDROM 时没有使用专门的 unhide 选项,那幺安装 CD 上的隐藏档案可能会无法找到,从而导致安装失败。
4. 额外的调整过程
Wine 安装很少能直接使用(对它来说也就是从 tarfile 解开)。通常需要进行全面的调整;例如,一个程式的安装可能与您在配置档案中设定的 Windows 版本不相容;而修改那个版本又可能会影响一些已安装的应用程式。对很多 DLL 来说也是如此。为此,Wine 提供了一个巧妙的修复,让您可以设定特定于应用程式的属性,不过,一般的用户可能不会像我们一样满意。
5. 额外的安装步骤
大部分应用程式的安装过程都不是标準的。例如当我们安装 Internet Explorer 6 时,必须跳过一些步骤,比如 DCOM98 的定位与安装。对用户来说,这类事情可能是最大的障碍。
注意,这些并不是病症,而是举例说明了是哪些种类的事情导致对一般用户来说 Wine 看起来複杂而且困难。
更多 Wine 所不能做的
看完 Wine 的可用性问题后,让我们来总结在尝试使用 Wine 时一些常见的技术问题。
1. 缺少 DLL
这可能是最常见的问题:很多安装由于缺少 DLL 而失败,这时需要熟练使用调试器来决定下一步(稍后将深入讨论调试器)。解决问题的最佳方法是由错误信息寻找到所需的DLL,并进行安装。这些都可能难倒初学者。
2. DLL 版本问题
一些安装程式在开始之前会检查现有的系统 DLL。Wine 解决这一问题的方法是,创建假 DLL 以满足安装程式的需要。不过,有一些安装程式会更进一步并深入检查 DLL 以获得它们的版本。这对假的 DLL 来说要求太高了,会导致安装失败。
3. DLL 载入次序
Wine 有对很多 Windows DLL 的实现,而且如果可用,它还可以使用原始的 Windows DLL。如果两种 DLL 都可用,在初学者看来应该选择总是使用 Windows 自己的 DLL,但实际上 Windows DLL 有时会包含不能被满足的依赖。要确定是更应该使用 Wine 的 DLL 还是应该使用本机 DLL,惟一的方法是,基于各个应用程式反覆进行试验。
4. DLL 中的函式
当一个 Wine DLL 没有实现 Windows 中相应的 DLL 的全部功能时,应用程式可能会遭遇函式调用失败。由于 DLL 是动态载入的,可能没有办法事先知道会发生这样的事情。这是一个複杂的问题,有一些可做的工作,但最终实际来说它只是取决于应用程式的代码如何编写。
有一些因素会减轻这些问题。一方面,您可能会一个一个地遇到这些问题,而不是一次遇到全部问题,这样处理起来要容易些。另外,您遇到的那些问题可能其他人曾遇到过并已经解决(而且解决方案已经公布出来)。Wine 用户组非常活跃,会提供许多帮助,每周一次的 Wine 时事通讯(参阅 参考资料)是极好的信息资源。
Wine 中还没有实现的 Win32 API
在 Wine 中,很多 Win32 API5 的函式是残缺不全的。最常见的原因是,相当多的 Win32 API 并没有被文档化。这就意味着一个特别的应用程式可能会调用某个函式,而完全没有关于此函式的可用资料。例如,我们在运行一个简单的 RPC 程式时发现了 RtlAnsiCharToUnicodeChar 这个函式。在 MSDN 上的搜寻结果显示没有关于这个函式的资料,而且没有关于所有 RtlXXXX 类别函式的资料。因此,如果它们在 Wine 中的实现对一些应用程式来说至关重要,那幺人们可能只有去猜测它们的行为了。

转载请注明出处海之美文 » wine(兼容层)

相关推荐

    声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:ailianmeng11@163.com