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

一 因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了。

最新文章

  1. 【Java每日一题】20161102
  2. collections中可命名元组和队列
  3. sphinx.conf 详解
  4. oracle11.0.2 64位版本 Toad连接
  5. HDU-1035 Robot Motion
  6. web项目的两个创建形式website和webapplication
  7. 工具类总结---(五)---SD卡文件管理
  8. Python Web框架(URL/VIEWS/ORM)
  9. Tomcat:3DES解密时中文乱码
  10. 安卓易学,爬坑不易—腾讯老司机的RecyclerView局部刷新爬坑之路
  11. Python 读取 支付宝账单并存储到 Access 中
  12. jdk8系列二、jdk8方法引用、重复注解、更好的类型推断、新增注解
  13. 专题[vjudge] - 数论0.1
  14. 将数据挂载到 docker 容器中的3种方式:volume、bind mount、tmpfs
  15. Python爬虫项目--爬取自如网房源信息
  16. 未能加载文件或程序集,PublicKeyToken=“**********”,或它的某一个依赖项。强名称验证失败。
  17. dedecms建的网站如何去掉/index.html
  18. 多线程---ReentrantLock
  19. springboot-15-启动时加载数据的方法CommandLineRunner
  20. (z转)基于CPU的Bank BRDF经验模型,实现各向异性光照效果!

热门文章

  1. 我理解的epoll(一)——实现分析
  2. kafka无法消费数据提示找不到分区
  3. 目标检测后处理之NMS(非极大值抑制算法)
  4. TF版网络模型搭建常用代码备忘
  5. (备忘)Python字符串、元组、列表、字典互相转换的方法
  6. linux基础_使用指令
  7. GPU driven pipeline in metal
  8. 如何低成本搭建dnslog服务器
  9. 【细谈Java并发】谈谈LinkedBlockingQueue(转)
  10. python类的多态、多态性