zoukankan      html  css  js  c++  java
  • 因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了。

  • 相关阅读:
    ubuntu 进入临时客户会话页面 转入用户自己页面
    python hmac 加密
    docker 学习
    python try except 捕捉错误得到错误的时候的值
    python2 python3 m2crypto 安装(rsa 私钥文件加密)
    python3 requests 模块 json参数和data参数区别
    爬虫-鸡哥给大家的福利
    常用模块2
    python入门到放弃之 面向对象vs面向过程
    python放弃之 模块和包
  • 原文地址:https://www.cnblogs.com/laizhenghong2012/p/11311354.html
Copyright © 2011-2022 走看看