海康GigE相机的SDK二次开发、公司的算法SDK识别图片,各自都做了单元测试。
导入算法SDK后,编译正常,但在运行时出现segment fault。
gdb定位到问题出现在libjpeg.so.8上,使用堆栈的内存地址查不到出错位置的符号。
借了一下算法SDK的源码,只有一句imread……
编译通过,应该在链接时可以找到符号,但是运行出错,可能链接的位置不对。
见这张图(出处不明,侵删):
看到一篇文章,OpenCV发行版在调用这个jpeg时,与系统库的版本不太一样。
链接:https://www.cnblogs.com/cheungxiongwei/p/8383605.html
想了想,在编译OpenCV时,有选项BUILD_JPEG。找到源码目录(opencv-master/3rdparty/libjpeg),查看change.log,发现已经是9d版本(12-Jan-2020)。
于是试试看,在CMake里面加上了BUILD_JPEG,重新编译,居然可以正常运行了……
很奇怪的是此时用nm看libopencv_imgproc.so,指向的jpeg还是系统库里的libjpeg.so.8。
此处的未解之谜mark一下!如果有缘看到的小伙伴,请不吝赐教哈~
————————————————————————————————————————
2021.10.26
追踪OpenCV源码,看到imread处理图片在imgproc模块下,通过文件检索图片格式,根据格式的readHeader()进行解码,怀疑是在这里崩溃。