最近在看ffmpeg.c的源码,看代码的时候习惯用gdb调试一下。因此准备编译一个可调式的ffmpeg。
./configure --help
看到了--enable-debug 和 --extra-cflags --extra-ldflags 这几个选项。
./configure --enable-shared --enable-gpl --enable-libmp3lame --enable-libx264 --enable-debug --extra-cflags=-g --extra-ldflags=-g
make
make install
果然编译成功之后,源码出现一个ffmpeg_g ,然后gdb ./ffmpeg_g 开始调试
问题出现了,gdb能够成功读取ffmpeg_g的调试信息,但ffmpeg_g加载的.so动态库调试信息是没法读取到的。单步的时候根本进不到动态库里面。很奇怪,编译的时候明明已经带上了-g选项。
跳到libavcodec目录
gdb libavcodec.so
**
Reading symbols from /home/wans/source/ffmpeg-0.10.6/libavcodec/libavcodec.so...done.
提示调试信息读取成功。
接着跳到/usr/local/lib下面
gdb libavcodec.so
**
Reading symbols from /usr/local/lib/libavcodec.so...(no debugging symbols found)...done.
告诉找不到调试信息,到这儿基本上已经知道,make install 安装到/usr/local/lib下面的.so并不是源码目录下面的。或者说make install只会安装不带调试信息的库