|
|
我是看了这个贴子http://www.linuxsir.cn/bbs/showt ... 有机会一试。
在64位环境下编译,已有的补丁不够,还要改动几个地方,我列一列步骤:
1)ebuild /usr/portage/local/layman/gentoo-china/media-video/realplayer/realplayer-10.0.8-r1.ebuild unpack
2) 解压完后应该也打完了已有有补丁了,手工改几个地方:
A、realplay-10.0.8/datatype/image/jpg/import/jpeg-6b/jmorecfg.h, 第160行
#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */
#if (defined _UNIX && (defined _ALPHA || defined _OSF1))
typedef int INT32;
#else
typedef long INT32;
#endif
#endif
改成:
#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */
typedef int INT32;
#endif
B、然后有两个库需要编译成static library,要不然连接的时候会报错,提示用-fPIC选项重新编译。分别是:libogg和libtheora。
这两 个lib也可以用ebuild解压,然后到解压目录加上两个选项进行配置,如:
./configure --enable-static --disable-shared && make install, 完成安装。
C、接着,改掉连接了上面两个库的地方,将动态连接方式改成静态连接方式,一共有三个文件,分别是:
1)realplay-10.0.8/datatype/theora/renderer/linux2.pcf,去掉下面两行:
project.AddLibraries(os.path.join(oggLibPath, "libogg.a"),
os.path.join(oggLibPath, "libtheora.a"))
2)realplay-10.0.8/datatype/vorbis/renderer/unix.pcf,去掉下面一行:
project.AddLibraries(os.path.join(GetSDKPath("oggvorbissdk"), "lib", "libogg.a"))
3)realplay-10.0.8/datatype/ogg/fileformat/unix.pcf, 去掉下面一行:
project.AddLibraries(os.path.join(GetSDKPath("oggvorbissdk"), "lib", "libogg.a"))
D、再接着,不要强行编译那个aac codecs了,因为realplay_gtk_current-20060824-dist_linux-2.6-glibc23-amd64.zip中也没有64位相关的datatype_dist,一般只要把realplay-10.0.8/Makefile中有关aac的行注释掉就行了。
E、最后,还有一个地方动要打补丁的,编译的时候居然说__amd64__为"Unknown CPU architecture",请打开这个文件:realplay-10.0.8/common/import/gecko-sdk/nspr/include/prcpucfg.h,定位到这一行:#elif defined(__ia64__),改成#elif defined(__ia64__) || defined(__amd64__), 这样应该可以了,因为虽然ia64与amd64的指令可能不同,但字节排列方式应该还是一致的,所以我们可以安全地使用这段定义。
补丁完成,现在可以回到Terminal,用ebuild ... compile来编译了,编译完成后在Release目录下会有一个跟官方发行版一样的.run文件,命令行下执行./*.run就可以安装了。
至于不能运行的原因,暂时不详,我用strace看过,原以为是segfault,但发现居然报个general error就退出来了,看来得想办法编译一个调试版跟踪一下才知道原因。
到这里可能很多人都会想着那些64位codecs,呵呵,确实是可能编译的都编译出来了(除了先前说的那个aac),我试过给mplayer用,但不知道怎么搞的,居然不认,也有可能是配置的原因,也有可能是本来就不能用,反正也没太多的时间玩下去,将整个hacking过程奉上,盼望有时间又有精力的兄弟们接着努力  |
|