因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
的静态库的时候自然就报了未定义的引用的错误了。
于是,修改DBoW3
的CMakeLists.txt
文件,使用OpenCV 4.1.1
作为其依赖,重新编译并安装DBoW3
库,问题得以解决!
顺便再多啰嗦几句,我查看了cmake
的CMAKE_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了。
最新文章
- 【Java每日一题】20161102
- collections中可命名元组和队列
- sphinx.conf 详解
- oracle11.0.2 64位版本 Toad连接
- HDU-1035 Robot Motion
- web项目的两个创建形式website和webapplication
- 工具类总结---(五)---SD卡文件管理
- Python Web框架(URL/VIEWS/ORM)
- Tomcat:3DES解密时中文乱码
- 安卓易学,爬坑不易—腾讯老司机的RecyclerView局部刷新爬坑之路
- Python 读取 支付宝账单并存储到 Access 中
- jdk8系列二、jdk8方法引用、重复注解、更好的类型推断、新增注解
- 专题[vjudge] - 数论0.1
- 将数据挂载到 docker 容器中的3种方式:volume、bind mount、tmpfs
- Python爬虫项目--爬取自如网房源信息
- 未能加载文件或程序集,PublicKeyToken=“**********”,或它的某一个依赖项。强名称验证失败。
- dedecms建的网站如何去掉/index.html
- 多线程---ReentrantLock
- springboot-15-启动时加载数据的方法CommandLineRunner
- (z转)基于CPU的Bank BRDF经验模型,实现各向异性光照效果!