分类: LINUX
2010-06-04 11:07:54
在linux上编译vlc,花了很久才搞定 ,因此特地的记录下整个编译过程。 本来先是想在windows上用cygwin,或者msys+mingw来进行编译,后来老大来了句真的linux都编译不过,假的linux更会遇到问题了,想想也是,自己的目的不在于做一个windows上面的vlc版本,而是想调试vlc,看一下它的执行过程,于是还是回到linux进行编译,在真实的linux物理机器上编译速度很快。 linux的版本是fedora10, vlc的版本是最新的vlc1.0.2。 Vlc linux 上的编译过程 : 1.首先从vlc的官网上下载最新的vlc代码,首先解压缩,然后进入解压后的目录。 因为vlc大量使用了第三方的库, 比如libdvbpsi(TS),libmpeg2,ffmpeg等等,所以我们需要首先下载我们需要的第三方库进行编译。VLC给出了一个自动化的解决方案,关注一下主目录\extras\contrib,里边有一些工具来帮助你自动下载、patch和编译所有可能用到的第三方库。先运行一下那个目录下的bootstrap,如果缺少***.mak的话可以到VLC的代码库中找一下,是一个系统相关的文件,然后简单的一句make就可以了。如果你对这些库比较熟悉的话最好先手动筛选一下,有一些可能不是你所需要的,而下载他们可能需要很长的时间。 after you executed bootstrap, there is a file called "distro.mk", you can modify it to decide which libs you will compile? 这一步会花很长的时间,中途也会碰到很多问题: 1) 比如在编译ffmpeg的时候需要用到libgsm,当然你如果让ffmpeg不支持libgsm也行,libgsm在给出的链接地址已经找不到了,所以需要你自己从网上下载下来放到extras/contrib/src目录下,然后就可以编译通过了,在编译extras库的过程中,可能有不少链接地址已经失效,这时候就需要自己去下载这些库,然后编译; 2) 编译过程中最郁闷的是libtool的问题,最新给出的libtool有bug存在,所以可以使用系统自带的libtool,在/usr/bin中,你可以把它们拷贝过来,当然你也可以修改configure文件,把里面的libtool换成/usr/bin/libtool也一样。 3) 在编译x264的时候,提示说ffmpeg中libavswscale有错误,编译总是通不过,后来发现是pixdesc.h/.c放在libavcodec中了,而以前是放在libavutil中的,所以得把这个文件放回去,然后修改Makefile文件,这样就可以编译过去了。 2.第一步搞定以后,就可以进入vlc目录下编译vlc的源代码了,这时候才想明白第一步中不是所有的库都需要,其实只需要编译自己需要的库就可以了,比如你只是想让vlc播放带mpeg2的TS流,那么你只需要编译libmpeg2, liba52, libdvbpsi就可以了。 在这里最重要的就是配置configure的参数了,因为它决定了你需要在vlc中添加哪些插件,决定编译后的vlc到底有多大,下面是我的配置文件: ./configure \ --enable-x11 \ --enable-xvideo \ --enable-sdl \ --enable-avcodec \ --enable-avformat \ --enable-swscale \ --enable-mad \ --enable-dvbpsi \ --enable-a52 \ --enable-libmpeg2 \ --enable-dvdnav \ --enable-faad \ --enable-vorbis \ --enable-ogg \ --enable-theora \ --enable-mkv \ --enable-freety --disable-fribidi \ --enable-speex \ --enable-flac \ --disable-live555 \ --enable-caca \ --disable-skins2 \ --enable-alsa \ --disable-qt4 \ --enable-ncurses \ --enable-release \ --with-dvbpsi=/usr/local \ --enable-run-as-root \ --with-libmpeg2-tree=/home/lf/linfeng/vlc/vlc-1.0.4/extras/contrib/src/libmpeg2 在这里可以执行./configure -h在获得有哪些参数可以配置,看多了就明白是怎么回事了。 接着执行make && make install, 注意make install需要超级用户权限. 3. 在第二步中,make的时候同样会遇到很多问题: 1) libtool: ./libtool: line 814: X--tag=CC: command not found google得出结论是libtool的版本问题,最新的好像有bug,但是找个老版本来安装太麻烦,无意间看到一个方法:修改libtool文件,将ECHO="echo"替换为echo="echo",错误消失... 4. 经过make install后,vlc就以及编译并安装好了,这时候就可以执行vlc命令了。 用vlc播放*.m2v, *.ts的文件,vlc界面上就会出现如下错误: main decoder error: no suitable decoder module for fourcc `mpgv'. 同时,console中还会出现如下警告: 重定位后无法恢复段 prot: 权限不够 一度以为是自己没有将libmpeg2给安装上, 后来弄了半天才发现是selinux把插件给禁止了, 所以vlc没有把这些插件给加载进去,当然就找不到mpgv的解码器libmpeg2, 执行setenforce 0把selinux关闭。 5. 这样,我们就可以运行我们的vlc播放器了,如果要调试vlc的代码,就可以修改源码,然后进行调试:) 最后总结下,如果要编译vlc这种比较大的开源库,就要做好花时间的准备,这个不可能一下子就弄完,中间你会遇到很多问题,当然在借助google的同时,还需要自己认真去分析是哪里出问题了,因为linux下很多开源软件在不断的升级中,其中肯定会有很多的bug还没有解决可能就提交源代码了,所以有时候需要自己所学的只是去解决这些问题,在解决问题的过程中,你就成长了。 |