问题描述
dlib版本:19.21
用opencv+dlib做人脸识别,打算做一个跨平台的人脸识别库,在windows下程序已经可以正常跑起来了,可是在linux上编译生成动态库之后调用接口产生如下错误
terminate called after throwing an instance of ‘dlib::image_load_error’
what(): jpeg_loader: error while loading image: JPEG parameter struct mismatch: library thinks size is 656, caller expects 624
Aborted (core dumped)
本来以为dlib用的静态编译的方式应该在windows上能跑linux上能编译也能跑才对,结果出现了这样的问题
解决过程
产生这个问题证明dlib的jpeg支持是有效的(注意linux下cmake编译dlib库时添加宏 -DDLIB_JPEG_SUPPORT
-DDLIB_PNG_SUPPORT,以及其他可以加快计算速度的宏,但是需要某些硬件支持),而且程序运行的时候是加载了动态库的,本以为dlib应该全部静态编译进了人脸识别动态库
根据网上查找的资料显示应该是依赖libjpeg.so这个库
所以在linux上使用命令
whereis libjpeg
发现我用的linux上有三个版本的动态库libjpeg.so libjpeg.so.8 libjpeg.so.8.2.2
这里使用暴力的方式直接把它们的名字都改了再去调用