流媒体04:VLC2.2.1的Linux编译及调试

简介:

Windows环境下编译的VLC或通过Linux交叉编译的VLC,调试起来非常麻烦,之前的51CTO的博客写过老版本的VLC的调试,改动太多,速度也很慢,故新版本并没有继续在类似环境下继续折腾VLC的调试。偶然发现Ubuntu下直接编译VLC很快很好很方便,而且配合GDB调试只要加一条指令即可。
另外,配合QT Creator,在IDE中设置断点,读取打印变量等都非常的直观。
本文介绍VLC2.2.1的Linux编译,当然,编译的主要目的是:调试。

环境

与交叉编译VLC2.2.1一样的环境,请参考流媒体02:Linux交叉编译VLC-2.2.1。

编译

在此只记录命令。

1
2
3
4
5
6
$ sudo apt-get build-dep vlc -y
$ tar xJvf vlc-2.2.1.tar.xz
$ cd vlc-2.2.1/
$ ./bootstrap
$ ./configure --enable-debug
$ make -j2

编译完成后,运行测试。

1
$ ./vlc ~/01.avi

从运行结果看,VLC的播放窗口与原有界面分离了,没有找到解决原因。

官方的VLC并没有此问题。

1
2
$ sudo apt-get install vlc
$ vlc ~/01.avi

通过运行如下命令,可以看到官网VLC的编译脚本,有兴趣的可以研究下。

1
$ vlc --extraintf=logger -vvv ~/01.avi

编译脚本如下。请酌情修改${prefix}相关参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
./configure  '--includedir=${prefix}/include' \
'--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info' \
'--localstatedir=/var' '--libdir=${prefix}/lib/x86_64-linux-gnu' \
'--libexecdir=${prefix}/lib/x86_64-linux-gnu' \
'--disable-dependency-tracking' '--build=x86_64-linux-gnu' \
'CPPFLAGS=-D_FORTIFY_SOURCE=2' 'LDFLAGS=-Wl,-Bsymbolic-functions -Wl,-z,relro' \
'--config-cache' '--disable-maintainer-mode' '--disable-silent-rules' \
'--disable-update-check' '--enable-fast-install' '--prefix=/usr' \
'--docdir=/usr/share/doc/vlc-nox' '--libdir=/usr/lib' '--sysconfdir=/etc' \
'--with-binary-version=1' '--enable-a52' '--enable-aa' '--enable-bluray' \
'--enable-bonjour' '--enable-caca' '--enable-chromaprint' '--enable-dbus' \
'--enable-dca' '--enable-directfb' '--enable-dvbpsi' '--enable-dvdnav' \
'--enable-faad' '--enable-flac' '--enable-fluidsynth' '--enable-freerdp' \
'--enable-freetype' '--enable-fribidi' '--enable-gles1' '--enable-gles2' \
'--enable-gnutls' '--enable-jack' '--enable-kate' '--enable-libass' \
'--enable-libmpeg2' '--enable-libxml2' '--enable-lirc' '--enable-live555' \
'--enable-mad' '--enable-mkv' '--enable-mod' '--enable-mpc' '--enable-mtp' \
'--enable-mux_ogg' '--enable-ncurses' '--enable-notify' '--enable-ogg' \
'--enable-opus' '--enable-pulse' '--enable-qt' '--enable-realrtsp' \
'--enable-samplerate' '--enable-schroedinger' '--enable-sdl' '--enable-sftp' \
'--enable-shine' '--enable-shout' '--enable-skins2' '--enable-speex' \
'--enable-svg' '--enable-taglib' '--enable-theora' '--enable-twolame' \
'--enable-upnp' '--enable-vcdx' '--enable-vdpau' '--enable-vnc' \
'--enable-vorbis' '--enable-x264' '--enable-zvbi' \
'--with-kde-solid=/usr/share/kde4/apps/solid/actions/' \
'--disable-decklink' '--disable-dxva2' '--disable-fdkaac' \
'--disable-gnomevfs' '--disable-goom' '--disable-libtar' \
'--disable-mfx' '--disable-opencv' '--disable-projectm' \
'--disable-sndio' '--disable-svgdec' '--disable-telx' \
'--disable-vpx' '--disable-vsxu' '--disable-wasapi' \
'--enable-alsa' '--enable-atmo' '--enable-dc1394' \
'--enable-dv1394' '--enable-linsys' '--enable-omxil' \
'--enable-udev' '--enable-v4l2' '--enable-libva' '--enable-vcd' \
'--enable-smbclient' '--disable-oss' '--enable-crystalhd' '--enable-mmx' \
'--enable-sse' '--disable-neon' '--disable-altivec' \
'CFLAGS=-g -O2 -fstack-protector-strong -Wformat -Werror=format-security' \
'CXXFLAGS=-g -O2 -fstack-protector-strong -Wformat -Werror=format-security' \
'build_alias=x86_64-linux-gnu' \
'OBJCFLAGS=-g -O2 -fstack-protector-strong -Wformat -Werror=format-security'

GDB调试

运行GDB。

1
2
3
$ gdb ./vlc
$ b 115
$ run ~/01.avi

程序会在vlc.c第116行停止。这就是main函数的入口。

QT Creator调试

安装并启动QT Creator。

1
2
$ sudo apt-get install qt-creator
$ qtcreator

“New Project” -> “Import Project” -> “Import Existing Project”,输入Project名称,选择VLC-2.2.1的路径。File Selection,默认。
在bin/vlc.c的115行设置断点,按F5调试,选取VLC的可执行文件,即可。

~~ EOF ~~

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
Linux 编译器 开发工具
【Linux快速入门(三)】Linux与ROS学习之编译基础(Cmake编译)
【Linux快速入门(三)】Linux与ROS学习之编译基础(Cmake编译)
|
缓存 NoSQL Linux
Linux调试
本文介绍了Linux调试、性能分析和追踪的培训资料,涵盖调试、性能分析和追踪的基础知识及常用工具。
2203 179
Linux调试
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
11247 2
|
Ubuntu Linux Go
golang编译成Linux可运行文件
本文介绍了如何在 Linux 上编译和运行 Golang 程序,涵盖了本地编译和交叉编译的步骤。通过这些步骤,您可以轻松地将 Golang 程序编译成适合 Linux 平台的可执行文件,并在目标服务器上运行。掌握这些技巧,可以提高开发和部署 Golang 应用的效率。
3481 14
|
运维 监控 Linux
BPF及Linux性能调试探索初探
BPF技术从最初的网络数据包过滤发展为强大的系统性能优化工具,无需修改内核代码即可实现实时监控、动态调整和精确分析。本文深入探讨BPF在Linux性能调试中的应用,介绍bpftune和BPF-tools等工具,并通过具体案例展示其优化效果。
1017 14
|
存储 NoSQL Linux
linux之core文件如何查看和调试
通过设置和生成 core 文件,可以在程序崩溃时获取详细的调试信息。结合 GDB 等调试工具,可以深入分析 core 文件,找到程序崩溃的具体原因,并进行相应的修复。掌握这些调试技巧,对于提高程序的稳定性和可靠性具有重要意义。
8380 6
|
Linux 编译器 C语言
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
1092 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
Linux 编译器 C语言
Linux c/c++之多文档编译
这篇文章介绍了在Linux操作系统下使用gcc编译器进行C/C++多文件编译的方法和步骤。
345 0
Linux c/c++之多文档编译
用clang编译Linux内核
用clang编译Linux内核