libvlc_new 调用产生段错误
在调试程序的时候,碰到一个奇怪的段错误问题。只要链接的时候使用-Wl,-rpath=./vlc/lib就会产生段错误,如果链接的时候使用的是-Wl,-rpath=../../tool/vlc/lib则不会出现。
机器是老旧的NeoKylin 4.0版本,没有安装gdb(实际上也不可能去安装)。无法调试,所以在程序里多添加了一些打印输出,终于定位到产生段错误的位置。
代码

输出

查了一些资料
http://www.videolan.org/developers/vlc/doc/doxygen/html/group__libvlc__core.html
这里说 在POSIX系统上,SIGCHLD信号不能被忽略,即信号处理程序必须设置为SIG_DFL(默认处理)或函数指针,而不能是SIG_IGN(忽略)。
还有 LibVLC可以创建线程。 因此,任何线程不安全的进程初始化必须在调用libvlc_new()之前执行。
但是这里没有说到重点,这些都不是产生段错误的原因。
真正的原因是因为vlc存在插件缓存,需要刷新插件缓存才行。
在vlc/lib/vlc/plugins下存在一个plugins.bat文件,cat这个文件可以发现其中大部分都是普通文本,少数是非文本内容。
通过网络搜索,找到这篇文章,真正的说明了问题 http://blog.jianchihu.net/libvlc_new-return-null.html
自己编译的vlc,vlc-cache-gen程序实际上在vlc/lib/vlc/vlc-cache-gen。执行下面命令即可
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./vlc/lib
./vlc/lib/vlc/vlc-cache-gen ./vlc/lib/vlc/plugins/
然后就没有问题了
libvlc_new 调用产生段错误的更多相关文章
- 调用sort段错误问题
问题:sort的比较函数实现有问题导致进程调用sort时core了. 结论:特别要注意,sort的比较函数必须遵循严格弱排序(strict weak ordering)的规则. 这是最近在工作中遇 ...
- linux C++ 莫名奇异的段错误(segmentation fault),无法调用其他函数
进来在linux下开发C++项目,遇到了非常奇怪的bug. 项目须要多线程实现,在写好代码后,每当执行到线程函数内部,当内部调用其他函数如printf.fopen等时就会提示段错误(segmentat ...
- 【转】段错误调试神器 - Core Dump详解
from:http://www.embeddedlinux.org.cn/html/jishuzixun/201307/08-2594.html 段错误调试神器 - Core Dump详解 来源:互联 ...
- linux下cp覆盖原so文件时引起的段错误原因确定
原创作品,转载请注明出处http://www.cnblogs.com/leo0000/p/5694416.html 最近因为一个很有意思的段错误学习了一些新的东西. 当时现象是这样的,程序正在运行,系 ...
- Linux环境下段错误的产生原因及调试方法小结(转)
最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且 项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation F ...
- Linux环境下段错误的产生原因及调试方法小结
转载自http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之 ...
- 【转】gdb 调试段错误
[转]gdb 调试段错误 转自:blog.csdn.net/yangzhu1982/article/details/6318600 开发嵌入式Linux的时候经常会遇到segmentation fau ...
- Linux下的段错误(Segmentation fault)
Linux开发中常见段错误问题原因分析 1 使用非法的内存地址(指针),包括使用未经初始化及已经释放的指针.不存在的地址.受系统保护的地址,只读的地址等,这一类也是最常见和最好解决的段错误问题,使用G ...
- strcat函数造成的段错误(Segmentation fault)
转自:http://book.51cto.com/art/201311/419441.htm 3.21 strcat函数造成的段错误 代码示例 int main() { char dest[7]=& ...
随机推荐
- MSSQL2008 全文索引的创建
从MSSQL2008开始,全文索引推荐的创建方式已经与2005不同了.对于字符类型的数据库,可以直接创建. CREATE UNIQUE INDEX hr_job_idx ON hr_job_datab ...
- 【转】你真的懂select Socket模型吗?
转自:http://www.cppblog.com/xvsdf100/archive/2013/12/10/204689.html 只要接触过c/c++网路编程人都可能会知道select io ...
- Google和Baidu的站内搜索代码
<!-- SiteSearch Google --> <form method="get" action="http://www.google.com/ ...
- Boost.Asio 网络编程([译]Boost.Asio基本原理)
转自:https://m.w3cschool.cn/nlzbw/nlzbw-3vs825ya.html Boost.Asio基本原理 这一章涵盖了使用Boost.Asio时必须知道的一些事情.我们也将 ...
- JS条件判断
JavaScript 是一种可以在浏览器中运行的脚本语言,是一种弱语言(相对于C,C#,JAVA而言),只要是计算机语言就会使用到条件判断式,而JavaScript作为一种“弱”语言,它的条件判断常常 ...
- 【Spark】SparkStreaming-如何使用checkpoint
SparkStreaming-如何使用checkpoint sparkstreaming checkpoint 默认_百度搜索 spark streaming中使用checkpoint - HarkL ...
- VS2013第一个应用boost的程序
下载boost binary https://sourceforge.net/projects/boost/files/boost-binaries/1.67.0_b1/ 由于我用的是Windows1 ...
- 设置Linux中的Mysql不区分表名大小写
1. MySQL数据库的表名在Linux系统下是严格区分大小写的,在Windows系统下开发的程序移植到Linux系统下,如果程序中SQL语句没有严格按照大小写访问数据库表,就可能会出现找不到表的错误 ...
- python 几种常用测试框架
测试的常用规则 一个测试单元必须关注一个很小的功能函数,证明它是正确的: 每个测试单元必须是完全独立的,必须能单独运行.这样意味着每一个测试方法必须重新加载数据,执行完毕后做一些清理工作.通常通过se ...
- 视频播放代码 crastr3
下载:http://down.51cto.com/data/1904974 代码(亲测): <html xmlns="http://www.w3.org/1999/xhtml" ...