• 因OpenCV版本不一致所引发的报错



    注:原创不易,转载请务必注明原作者和出处,感谢支持!

    一 因OpenCV版本不一致所引发的报错

    今天遇到了一个很有意思的报错。

    事情是这样的, 在编译《视觉SLAM十四讲》第12章的一个程序时,编译器报了“未定义的引用”的错误。该程序使用了DBoW3这个库,而这个库又是依赖OpenCV的。DBoW3这个库经过编译之后会生成一个静态链接库并被安装在/usr/local/lib路径下。

    未定义的引用错误使我我意识到这是链接库出了问题。经过一番折腾,发现原因是这样的。我的虚拟机里安装的是最新的OpenCV 4.1.1版本,但同时也安装了ROS,而ROS里自带了一个OpenCV 3.3.1的版本。在编译DBoW3库的时候,不知是何原因,cmake搜索到的是3.3.1版本的OpenCV,因此DBoW3的链接库链接的是3.3.1版本的OpenCV动态库。但是第12章里的程序所引用的却是4.1.1版本的OpenCV的头文件,所以在去链接DBoW3的静态库的时候自然就报了未定义的引用的错误了。

    于是,修改DBoW3CMakeLists.txt文件,使用OpenCV 4.1.1作为其依赖,重新编译并安装DBoW3库,问题得以解决!

    顺便再多啰嗦几句,我查看了cmakeCMAKE_MODULE_PATH变量的内容,发现它指向的路径是/usr/local/lib/cmake/usr/lib/cmake,而这两个路径下是没有FindOpenCV.cmake文件的,相反,OpenCV在安装时提供了OpenCVConfig.cmake文件,该文件在/usr/local/lib/cmake/opencv4/路径下。所以,你只需要在DBoW3库的CMakeLists.txt文件中指定OpenCV_DIR为前面所提到的路径值即可。这样cmake就能够找到4.1.1版本的OpenCV了。

  • 相关阅读:
    『Python』进程同步
    『Python』多进程
    『GoLang』协程与通道
    『GoLang』错误处理
    『码农翻身』语言的学习
    『GoLang』fmt包的使用
    异或运算符(^)、与运算符(&)、或运算符(|)、反运算符(~)、右移运算符(>>)、无符号右移运算符(>>>)
    HTML DOM focus() 方法
    JavaScript中的indexOf使用方法
    HTML 5 中的textarea标签
  • 原文地址:https://www.cnblogs.com/laizhenghong2012/p/11311354.html
Copyright © 2020-2023  润新知