记一次编码工程移植到新机器上出现的Core Dump问题

21 篇文章 1 订阅
16 篇文章 9 订阅

记录一个开发某个机器视觉工程中出现的问题,工程略微复杂,依赖项很多,主要有:相机库、Caffe、TensorRT、OpenCV、FFMPEG等。其中需要用到视频编码功能,因此,自己基于FFMPEG和X264写了一个编码接口,生成动态库文件libvideoenc.so并在工程中调用。出现的问题是,工程在A服务器上跑得好好的,移植到B服务器上却怎么都Run不起来,一跑录制功能就崩溃,类似这样的:

或者这样的:

百思不得解,只好打印出输入数据,发现输入数据没问题,排除图像采集的因素。再看以上两种表现,第一种,打开编码器并设置编码器参数都是OK的,但在编码输入数据时出错;第二种直接挂在了打开编码器阶段。因而想到是否底层库存在异常,ldd命令查看依赖的链接库,果然,存在两套不同的ffmpeg和libx264库,例如libx264库如下:

其中,下面一行(版本152)的libx264是自己编译出来实际需要用到的库,而上面一行(版本142)是通过apt-get安装opencv库时默认安装的libx264动态库(工程里也调用了opencv的接口),同样的,其他的依赖库如libavformat.so和libavcodec.so也都是两份,这样就导致了编码接口调用了错误的库文件,从而导致程序崩溃。那么问题来了,为什么同样的工程在原来的服务器上是好好的呢?问了安装opencv的同学,原来之前的服务器是通过代码编译的方式安装的opencv,并在安装的时候选择性地禁掉了ffmpeg库的安装,而在本台服务器则是通过apt-get方式默认安装了所有依赖库。

好了,原因找到了,问题也就迎刃而解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值