FFmpeg之Linux下编译与调试

下面的一切都是在 root 模式下进行的,可以不再 root 模式下进行
1. 安装linux的基础环境基础环境就是编译代码的基础库,Ubuntu联网安装软件很简单,一个语句即可搞定,这里列出语句如下:
# apt-get -y install autoconf automake build-essential libtool libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev2. 安装依赖库依赖库分两方面,参考以下网站列出的依赖库信息,本文选择的版本均参考于此网页: FFmpeg依赖库信息
2.1 FFmpeg推荐的依赖开发库(不需要独立安装)# apt-get -y install libass-dev libfreetype6-dev libmp3lame-dev libtheora-dev libvorbis-dev libopus-dev libx264-dev yasm2.2 FFmpeg 桌面应用推荐的依赖开发库(不需要独立安装)# apt-get -y install libva-dev libvdpau-dev libsdl2-dev2.3 需要独立安装的依赖开发库首先创建 FFmpeg 代码目录,所有的源代码放在这个目录下
# mkdir ~/ffmpeg_sources2.3.1 安装 fdk-aac-0.1.5:【FFmpeg之Linux下编译与调试】# cd ~/ffmpeg_sources# wget http://downloads.sourceforge.net/opencore-amr/fdk-aac-0.1.5.tar.gz# tar -zxvf fdk-aac-0.1.5.tar.gz && mv fdk-aac-0.1.5 fdk-aac# cd fdk-aac# ./configure --prefix="$HOME/ffmpeg_build" --disable-shared# make# make install# make distclean2.3.2 安装 libvpx-1.6.1:# cd ~/ffmpeg_sources# wget http://storage.googleapis.com/downloads.webmproject.org/releases/webm/libvpx-1.6.1.tar.bz2# tar -jxvf libvpx-1.6.1.tar.bz2 && mv libvpx-1.6.1 libvpx# cd libvpx# PATH="$HOME/bin:$PATH"# ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests# PATH="$HOME/bin:$PATH"# make # make install# make distclean2.3.3 安装 x265-2.4:# cd ~/ffmpeg_sources# sudo apt-get install cmake mercurial# wget https://bitbucket.org/multicoreware/x265/downloads/x265_2.4.tar.gz# tar -zxvf x265_2.4.tar.gz && mv x265_2.4 x265# cd x265/build/linux# PATH="$HOME/bin:$PATH"# cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source# make # make install# make clean2.3.4 安装 x264:# cd ~/ffmpeg_sources# wgethttps://download.videolan.org/x264/snapshots/x264-snapshot-20170822-2245-stable.tar.bz2# tar -jxvf x264-snapshot-20170822-2245-stable.tar.bz2 && mv x264-snapshot-20170822-2245-stable x264# ./configure --prefix="$HOME/ffmpeg_build" --enable-shared --enable-pic# make# make install# make distclean3. 编译FFmpeg# cd ~/ffmpeg_sources# wget http://ffmpeg.org/releases/ffmpeg-3.3.3.tar.xz# tar -Jxvf ffmpeg-3.3.3.tar.xz && mv ffmpeg-3.3.3 ffmpeg# cd ffmpeg# PATH="$HOME/bin:$PATH"# export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig"# ./configure --prefix="$HOME/ffmpeg_build" --pkg-config-flags="--static" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree# PATH="$HOME/bin:$PATH"# make# make install# make distclean# hash -rFFmpeg 编译之后,即可使用 。编译生成的可执行程序在 ~/bin 目录下
注:上面的 ./configure 配置编译后并不能进行调试,需要如下配置.
4. FFmpeg 代码 Debug刚才的工程可以运行,但不能debug 。解决此问题,首先认定一点,生成的可执行程序中,ffmpeg 不包含调试信息,调试信息在 ffmpeg_g 中,debug 要选择 ffmpeg_g 。
另外,./config选项也是确定包含调试信息的核心,需要在config中添加:

  • -–enable-debug=3:开启debug调试
  • -–disable-asm:禁用 asm 优化
  • --disable-optimizations:禁用优化,以便调试时按函数顺序执行 。
  • –-disable-stripping:禁用剥离可执行程序和共享库,即调试时可以进入到某个函数进行单独调试 。
采用以下命令重新config:
PATH="/home/rong/bin:$PATH" PKG_CONFIG_PATH="/home/rong/ffmpeg_build/lib/pkgconfig" ./configure--prefix="/home/rong/ffmpeg_build"--pkg-config-flags="--static"--extra-cflags="-I/home/rong/ffmpeg_build/include"--extra-ldflags="-L/home/rong/ffmpeg_build/lib"--bindir="/home/rong/bin"--enable-gpl--enable-libass--enable-libfdk-aac--enable-libfreetype--enable-libmp3lame--enable-libopus--enable-libtheora--enable-libvorbis--enable-libvpx--enable-libx264--enable-libx265--enable-nonfree--enable-pthreads--enable-debug=3--disable-optimizations--disable-asm--disable-stripping


推荐阅读