Blog

编译安装了 wine

今天下午经过反复的努力(主要是体力劳动),终于在 Macintosh 上安装上了 1.1.35 的开发版。虽然反复的操作弄的我挺恶心,不过也算对于 Macintosh 二进制文件有了更多的了解,也算比较高兴。

起因是在写上一篇文章的时候提到了 wine 与 WinApps 这个国产项目。WinApps 致力于通过 wine 来模拟一些 Windows,让它们可以运行在 Macintosh 平台上。我听说这个项目的时候,开发者已经模拟了 IE、迅雷、还有些输入法了。我那时最需要的就是迅雷,因为即使在 Mac 下,迅雷下 BT 的速度还是要超过 Transmission,所以就下载了需要的两个包。很多中文无法正常显示,比如菜单,但菜单下的项目却显式正常,所以我用得还算可以。只是后来会不稳定,在下载某种文件(是何种文件,这个规律我还没找出来)时,会突然程序终止。我曾经想把目前的程序都删掉,重新下载安装一遍,但再次上这个项目的网站上时却发现,这个程序需要 VIP 会员才能下载了。注册 VIP 会员的费用不高,30 多人民币,但支付方式让我没办法,所以我就只好作罢,继续勉强用当时的版本。

既然 WinApps 包里面已经有 wine 了,所以我就一直没有自己安装,需要的时候就从命令行调用 /Applications/WinApps/Wine.bundle/Content/bin/wine 来直接使用 wine。正好我需要使用 Xenu 来检查我的网站,它是个 Windows 程序,所以我就这样使用了 wine 来运行它。运行的结果还不错,但在我退出程序前检查了一下 wine 的版本,发现还停留在比较旧的 1.0.9 版本上,而 wine 网站上已经到了 1.1.35 了。我一直怀疑在新版本上是否会修改了中文等问题,再加上在找 Crossover 破解版的时候,看到文章中说如果有基础可以用开原版的 wine。于是我就有了自己装个 wine 好好配置的想法。

在 MacPorts 里面有 wine-devel,在升级一下 ports 后也成了 1.1.35 版本了。我于是就开始编译安装这个版本。结果需要编译很多 xorg 的包。我过去见到这种类型的软件基本上都是“退避三舍”的,因为 Mac 系统本身就有了 X11,再编译安装一遍就是浪费了,不能和 Mac 本身的包结合,也是我最不喜欢 MacPorts 的地方。今天为了编译 wine,也就忍痛接受了。结果呼呼呼的把所有依赖的包都装上了后,开始编译 wine-devel 了,却在 configure 的时候告诉我发生错误:

Error: You cannot install wine-devel for the architecture(s) i386

Error: because /opt/local/lib/libexpat.dylib only contains the architecture(s) x86_64.

Error: Try reinstalling the port that provides /opt/local/lib/libexpat.dylib with the +universal variant.

Error: Target org.macports.extract returned: incompatible architectures in dependencies

Error: Status 1 encountered during processing.

我当时看了这些后,才明白 wine 只有 i386 的版本,也就是 32 位的版本。而我的系统现在是 Snow Leopard,在升级后我重新安装编译了 MacPorts,因此所有通过 MacPorts 安装的软件,基本上都是 x86_64 的,也就是 64 位的。我看了信息后,以为就不能把 wine 安装在 Snow Leopard 上了,但又不甘心,于是就上网搜,结果搜到了这篇文章,有人遇到了和我一样的问题,后面有人给出了解答。原来 MacPorts 的意思是让我重新把依赖的包编译成 Universal 版本的,也就是在安装的时候加上 +universal。于是我就按照要求重新编译。

在观察编译时输出的信息时,我发现 MacPorts 编译了 i386 和 x86_64 的,才想到之前看到的说 Mac 系统的新 Universal 包的定义和过去不同的消息。过去的 Universal 意思是把 PPC 和 Intel 的程序都编译一遍,打成一个包,在运行的时候先判断平台,然后运行相应的程序。而在 Snow Leopard 中苹果已经完全放弃了 PPC 处理器,所以这里的 Universal 的意思是 32 位和 64 位的程序一起打成一个包的意思。当时看那篇文章的时候没有多想,没想到在这里得到了印证。

本来我想的还不错,以为编译几个包后就可以了,结果没想到一个一个竟然没完了。当中还有别的包,本身有依赖其它的包,configure 时就不通过,需要把那些包也编译成 Universal 格式的。我想起安装 wine-devel 时自动编译的那些包,顿时心情落到了谷底。但也没有别的办法,就嘴里一遍骂着一遍手上输入指令。然后我想到,这些依赖的包多数是 xorg-* 开头的,我如果把他们全都删除了,然后再编译 wine-devel,加上 +universal,岂不就是自动把依赖的包编译成 Universal 的了吗?想到了我就立即动手,结果 MacPorts 却问我说有某个包被其它包依赖,需要把依赖它的包删除了后才能删除这个包。我照做了几次后,却发现这种包不是一个两个,顿时心情落到了更深的谷底。我想 MacPorts 应该有相应的参数来强行删除包的吧,但却又不大了解参数,看文档试验了几个,感觉效果不大。

这条路不行,我又看到 wine-devel 的包已经被我重新编译的差不多了,于是又手工的编译剩下的,结果编译了两个之后终于弄完了,可以编译 wine-devel 了。

不过事情并不是按照我的想法进行的,wine 装上了,winetricks 也弄上了,我也复制了 simsun.ttc 和 simhei.ttf 到 Windows 的字体目录下,也按照网上的教程修改了注册表,但中文还是显式乱码。看来是两者编码不对,还不知道怎么修改。

总之目前在没有找到进一步方法之前,我是没什么心情研究了。迅雷还是用 WinApps 里的好了,还好我没删除旧的。英文小软件就用 wine 来跑,也没什么问题。不过,我当时下载的破解版的 Crossover 8 还没有删除,等有时间再研究一下,呵呵。

没有评论

Leave a Reply