在调试程序的时候,碰到一个奇怪的段错误问题。只要链接的时候使用-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。执行下面命令即可

  1. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./vlc/lib
  2. ./vlc/lib/vlc/vlc-cache-gen ./vlc/lib/vlc/plugins/

然后就没有问题了

libvlc_new 调用产生段错误的更多相关文章

  1. 调用sort段错误问题

    问题:sort的比较函数实现有问题导致进程调用sort时core了. 结论:特别要注意,sort的比较函数必须遵循严格弱排序(strict weak ordering)的规则.   这是最近在工作中遇 ...

  2. linux C++ 莫名奇异的段错误(segmentation fault),无法调用其他函数

    进来在linux下开发C++项目,遇到了非常奇怪的bug. 项目须要多线程实现,在写好代码后,每当执行到线程函数内部,当内部调用其他函数如printf.fopen等时就会提示段错误(segmentat ...

  3. 【转】段错误调试神器 - Core Dump详解

    from:http://www.embeddedlinux.org.cn/html/jishuzixun/201307/08-2594.html 段错误调试神器 - Core Dump详解 来源:互联 ...

  4. linux下cp覆盖原so文件时引起的段错误原因确定

    原创作品,转载请注明出处http://www.cnblogs.com/leo0000/p/5694416.html 最近因为一个很有意思的段错误学习了一些新的东西. 当时现象是这样的,程序正在运行,系 ...

  5. Linux环境下段错误的产生原因及调试方法小结(转)

    最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且 项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation F ...

  6. Linux环境下段错误的产生原因及调试方法小结

    转载自http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之 ...

  7. 【转】gdb 调试段错误

    [转]gdb 调试段错误 转自:blog.csdn.net/yangzhu1982/article/details/6318600 开发嵌入式Linux的时候经常会遇到segmentation fau ...

  8. Linux下的段错误(Segmentation fault)

    Linux开发中常见段错误问题原因分析 1 使用非法的内存地址(指针),包括使用未经初始化及已经释放的指针.不存在的地址.受系统保护的地址,只读的地址等,这一类也是最常见和最好解决的段错误问题,使用G ...

  9. strcat函数造成的段错误(Segmentation fault)

    转自:http://book.51cto.com/art/201311/419441.htm 3.21  strcat函数造成的段错误 代码示例 int main() { char dest[7]=& ...

随机推荐

  1. [转]Linux awk 命令 说明

    From : http://blog.csdn.net/tianlesoftware/article/details/6278273 一.  AWK 说明 awk是一种编程语言,用于在linux/un ...

  2. jquery实现相同事件名称,不同命名空间的调用方法

    <html xmlns="http://www.w3.org/1999/xhtml"> <head>  <title></title> ...

  3. 【BZOJ】【3930】【CQOI2015】选数

    数论/莫比乌斯反演/快速mu前缀和 比较容易想到令f[x]表示gcd=x的方案数,令g[x]表示x|gcd的方案数. 那么有$ g(d)=\sum_{d|n} f(n)$,根据莫比乌斯反演,有$f(d ...

  4. NIO中的heap Buffer和direct Buffer区别

    在Java的NIO中,我们一般采用ByteBuffer缓冲区来传输数据,一般情况下我们创建Buffer对象是通过ByteBuffer的两个静态方法: ByteBuffer.allocate(int c ...

  5. [转]HTTPS网络流量解密方法探索系列(一)

    前言 分析网络流量总是绕不开HTTPS,因其广泛使用甚至是强制使用逐渐被大众熟知,在保证其安全的同时也提高了对流量进行研究的难度.目前解析HTTPS协议的文章很多,有很多不错的文章可以带着入门,老实说 ...

  6. 第一章 第一个dubbo项目

    为了安全:服务启动的ip全部使用10.10.10.10 版本: dubbo:2.5.5 重要的网址: dubbo的github:https://github.com/alibaba/dubbo dub ...

  7. 读书笔记,《Java 8实战》,第四章,引入流

       集合是Java中使用最多的API,但集合操作却远远算不上完美.主要表现在两点,    第一,集合不能让我们像数据库的SQL语言一样用申明式的语言指定操作:    第二,现在的集合API无法让我们 ...

  8. MFC/Windows API 使用过的函数(持续更新)

    /*******************使用默认画笔对象**************************** // //绘制矩形 pDC->MoveTo(50, 50); //返回值是一个指 ...

  9. uva 10712 - Count the Numbers(数位dp)

    题目链接:uva 10712 - Count the Numbers 题目大意:给出n,a.b.问说在a到b之间有多少个n. 解题思路:数位dp.dp[i][j][x][y]表示第i位为j的时候.x是 ...

  10. gson ajax 数字精度丢失

    ajax传输的json,gson会发生丢失,long > 15的时候会丢失0 解决方案:直接把属性为long的属性自动加上双引号成为js的字符串,这样就不会发生丢失了,ajax自动识别为字符串. ...