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

记录一个开发某个机器视觉工程中出现的问题,工程略微复杂,依赖项很多,主要有:相机库、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方式默认安装了所有依赖库。

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

发布了57 篇原创文章 · 获赞 58 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/DeliaPu/article/details/83010008
今日推荐