ShowLyric 没法在 64 位系统下用?

昨晚临睡前看了篇文章《10款常用的Linux音乐播放器》,没忍住就去装了 Audacious,还有曾经的最爱 Amarok,顺便借助 Mutagen 解决了 mp3 标签中文乱码的问题(请看参考此文:《对 mp3 乱码问题的分析和解决》)。

随后想到要给 Audacious 装个歌词显示的插件,可惜花了十牛三虎之力也没成功,以下记录整个过程。

首先找到的是 LyricZilla,可惜已经停止开发,从源码安装没有任何说明,无法生成插件的 .so。

后来在 Ubuntu 中文社区上找到另一款用于 Audacious 的歌词显示插件 ShowLyric,当前版本为 0.3.11。

下载安装时提示找不到 gksu,于是 emerge 了个 gksu(好慢),随后打开 install 脚本才发现其实 gksu 就是个 gtk 版本的 sudo。要 sudo 的话,干嘛不直接写成 sudo ./install 呢? 不解。

安装完后,按照提示打开 Audacious 的插件设置面板,在 General 页中并没有找到 ShowLyric。检查一下 Audacious 的插件路径,是在 /usr/lib64/audacious/General/ 目录下,而 ShowLyric 被安装到了 /usr/lib/audacious/General/。只要拷贝一份过去就可以了。

安装好后依然没有显示歌词面板,论坛上有人提到是 64 位系统的问题,我在调试过程中发现似乎是 ttplayer 的问题,执行 /usr/share/ShowLyric/ttplayer 时提示:

/usr/share/ShowLyric/ttplayer: error while loading shared libraries: libpython2.5.so.1.0: wrong ELF class: ELFCLASS64

看看 ttplayer 依赖的库:

# ldd /usr/share/ShowLyric/ttplayer
linux-gate.so.1 => (0xffffe000)
libxml2.so.2 => /usr/lib32/libxml2.so.2 (0xf7e71000)
libpython2.5.so.1.0 => not found
libc.so.6 => /lib32/libc.so.6 (0xf7d41000)
libdl.so.2 => /lib32/libdl.so.2 (0xf7d3d000)
libz.so.1 => /lib32/libz.so.1 (0xf7d29000)
libm.so.6 => /lib32/libm.so.6 (0xf7d03000)
/lib/ld-linux.so.2 (0xf7fa7000)

原来 ttplayer 没有提供源代码,是在 32 位系统下预编译好的,它需要使用 32 位版本的 libpython2.5.so.1.0。最简单的办法就是从 32 位系统里拷贝一个过来,可惜俺手头只有 64 位的,只好到 Ubuntu 的源里找了个 32 位的 Python2.5 的 deb 包,然后用 deb2targz 转成 tar.gz,最后解压获得 libpython2.5.so.1.0,放到 /usr/lib32 下。

在 sonsole 中执行 Audacious,在搜索歌词时输出错误:

ShowLyric(0.3.8): The playlist length is 30!(../src/Audacious.c:97)

ShowLyric(0.3.8): The playlist pos is 27!(../src/Audacious.c:104)

ShowLyric(0.3.8): szFileName: 28. 信乐团 – 天高地厚 – 我活着 (4:48)
ShowLyric(0.3.8): szTitle: 我活着
ShowLyric(0.3.8): szArtist: 信乐团
ShowLyric(0.3.8): ClearLyric————————————
ShowLyric(0.3.8): LoadLyric(我活着, 信乐团)
ShowLyric(0.3.8): SearchLyric……

ShowLyric(0.3.8): 正在搜索歌词……

ShowLyric(0.3.8): (19)正在搜索歌词(6124)
Error when import TTDownLoadLyric
ShowLyric(0.3.8): (18)正在搜索歌词(6124)
ShowLyric(0.3.8):
——

ShowLyric(0.3.8): Error while searching.

在源码中没有找到 “Error when import TTDownLoadLyric”,那一定是在 ttplayer 里输出的。

再次执行 ttplayer:

# /usr/share/ShowLyric/ttplayer
歌曲名是必须指定的.
argvs: -t:title -a:artist -i:id -o:fileName
Error when import TTDownLoadLyric

/usr/share/ShowLyric/TTDownLoadLyric.py 是个 python 脚本,ttplayer 就是在调用 PyImport_ImportModule 载入这个模块时出错了。

终归究底还是 ttplayer 的问题,可惜没有源码,搞不定了。

俺是懒人,懒于申请 Ubuntu 中文社区的帐号。哪位过客看到了,方便的话就帮忙反应一下以上所说的这些问题吧。

— EOF —

发表评论

电子邮件地址不会被公开。 必填项已用*标注