在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需要超级用户权限.