有关Opencv Undefined Reference to cv::Mat::updateContinuityFlag()编译问题的解决

VScode编译中opencv的undefined reference 问题

一般来说,undefined reference to cv:: 等的问题是关于编译时依赖文件的问题,应该将包含库的路径弄好了就没问题(至少我是这样,而且网上对于具体问题应该有更具体的解决方法的文章,这个文章主要是针对Undefined Reference to cv::Mat::updateContinuityFlag()。

具体出错界面

CMakeFiles/test.dir/src/imageProcess.cpp.o: In function `cv::Mat::Mat(int, int, int, void*, unsigned long)':
/usr/local/include/opencv2/core/mat.inl.hpp:521: undefined reference to `cv::Mat::updateContinuityFlag()'

问题所在:在经过上网查找搜索以后,发现应该就是opencv版本的问题,updateContinuityFlag函数只在opencv 3.4.2及其最新版本中存在,而我使用的是Ubuntu 18.04中自带的opencv包,所以应该就是把opencv升级就好了。但是我在安装完opencv 3.4.2新版本之后,发现还是有问题,编译依然不行,经过一番挣扎后,就有了下面的解决过程,仅供参考,只是记录一下我的过程。

解决过程

1.下载安装opencv 3.4.2

(如果可以的话,试试先卸载老版本再安装新版本,不过注意删除库与其他库的依赖关系)
安装新版本,我选择的是opencv 3.4.2, 主要参考了以下文章完成了安装
链接:https://blog.csdn.net/qq_32408773/article/details/83346816
   https://blog.csdn.net/baidu_34971492/article/details/81665538
PS:检查自己的opencv版本可以在终端输入pkg-config opencv --modversion
  查看linux下的opencv安装库pkg-config opencv --libs

2.修改CmakeLists.txt

参考:https://github.com/jhu-lcsr/handeye_calib_camodocal/issues/22
首先我只是修改了编译出错的cpp文件的依赖,将find_package(OpenCV REQUIRED)改为find_package(OpenCV 3.4.2 REQUIRED),但是还是编译错误,后来发现应该要在文件最开始描述依赖文件时就要修改

3.再次编译

再次编译,没有错误了,但是有一个warning

/usr/bin/ld: warning: libopencv_imgproc.so.3.4, needed by /usr/local/lib/libopencv_highgui.so.3.4.2, may conflict with libopencv_imgproc.so.3.2
/usr/bin/ld: warning: libopencv_core.so.3.4, needed by /usr/local/lib/libopencv_highgui.so.3.4.2, may conflict with libopencv_core.so.3.2

经查找是因为opencv新版本和旧版本的冲突问题
(参考:https://blog.csdn.net/quantum7/article/details/88908071)
由于怕删除其余库所以我没敢直接卸载(看个人情况吧
于是我就去修改了一下include路径,使其只链接到opencv3.4.2, 编译成功!

大功告成!

再记录一个我opencv编译时遇到的问题

Assertion failed (scn == 3 || scn == 4) in cvtColor

这是由于灰度图的图片继续转为灰度图造成的问题
参考:https://blog.csdn.net/qq_31918961/article/details/95267126

你可能感兴趣的:(c++,opencv)