因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了。
因OpenCV版本不一致所引发的报错的更多相关文章
- Android版本28使用http请求报错not permitted by network security policy
Android版本28使用http请求报错not permitted by network security policy android模拟器调试登录的时候报错 CLEARTEXT communic ...
- Python开发:OpenCV版本差异所引发的cv2.findContours()函数传参问题
一.问题如下: cv2.findContours()这个方法是用来找出轮廓值的: # cv2.findContours找出轮廓值,cv2.RETR_EXTERNAL表示图像的外轮廓 binary, c ...
- 关于Mysql5.7高版本group by新特性报错
一个项目的开发到测试上线运营,团队对项目的管理不成熟会影响项目的开发效率.由于项目是我刚接手,独自在Centos搭建PHP环境,所以就考虑使用高版本,选择了Mysql5.7,本地开发环境还是Windo ...
- hibernate某些版本(4.3)下报错 NoSuchMethodError: javax.persistence.Table.indexes()
其实本来没啥大问题,但到网上查的时候发现了一些误人子弟的说法,所以还是记下来吧. 现象: hibernate从低版本升级到某一个版本时(我们是升到4.3.10)时,在程序启动时会报错: java.la ...
- [Android自动化] 在 pip-9.0.1 版本情况下安装 uiautomator2 报错的解决办法
1.在命令窗口中使用命令: pip install uiautomator2 时报 pip 版本过低,需要先升级 pip 版本,理论上会按照提示进行升级 pip 操作,但执行升级命令时到最后却还是报错 ...
- 新建maven指定jdk版本-eclipse新建maven项目报错The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path的解决方案
具体表现为: 使用Eclipse+Maven建立了一个Javaweb工程,JSP页面顶端出现“红色”的报错信息:The superclass "javax.servlet.http.Http ...
- 用友u8各版本在输出的时候报错提示:外部数据库驱动程序(1)中的意外错误
从10月12日起很多U8用户反馈,在各版本U8中输出报表时软件报错,报错内容“外部数据库驱动程序(1)中的意外错误”,经初步分析有以下解决方案:1.卸载微软的补丁:(1)如果是PC操作系统(一般是客户 ...
- Elasticsearch 6.2.3版本 同一个index新增type报错 Rejecting mapping update to [website] as the final mapping would have more than 1 type: [blog2, blog]
在website的index下已经存在一个名为blog的type.想在website下,新增一个名为blog2的type. 执行语句如下: PUT /website/blog2/1 { "t ...
- Windows系统安装最新版本RabbitMQ3.8.3及报错解决
今天想安装下RabbitMQ写几个用例看下,发现最新的安装包有些问题,不能直接安装使用,遇到一些问题,记录一下解决办法. 下载安装包 因为RabbitMQ是Erlang编写,安装时,需要先安装Erla ...
随机推荐
- 19.SSM整合_配置式开发
1.定义实体类Student 2.定义Student表 3.定义index页面 4.定义处理器 5.定义Service 6.定义Dao接口 7.定义Dao的Mapper配置文件 8.定义MyBatis ...
- sqoop1.4.6 用法总结一
Sqoop是一个用于在Hadoop和关系数据库或大型机之间传输数据的工具.您可以使用Sqoop将关系数据库管理系统(RDBMS)中的数据导入Hadoop分布式文件系统(HDFS),在Hadoop Ma ...
- MAVEN打包时没有将src/main/cache文件夹打到到WAR包中
某项目中ehcache配置文件写在src/main/cache中,结果用maven打包时,得到的WAR包里面没有这个文件夹 因为maven打包时默认只打包src/main/java中的文件和src/m ...
- 02_Hive安装简介
1.下载Hive安装包: 官网下载:http://hive.apache.org/downloads.html 百度云分享:https://pan.baidu.com/s/1M4LmdOXaq6T-P ...
- java—多线程—notify/notifyAll
notify应该使用在,只有两个线程在调用类中的两个方法,并在两个方法中进行互斥操作? 博客:Java多线程学习之wait.notify/notifyAll 详解 未完待续……
- Paper Reading:Deep Neural Networks for Object Detection
发表时间:2013 发表作者:(Google)Szegedy C, Toshev A, Erhan D 发表刊物/会议:Advances in Neural Information Processin ...
- 登录网站的autohotkey脚本
;如果需要这个软件的代码逻辑,删除敏感信息只需要把上面3行代码删除即可. !:: ;login经过测试必须用ie浏览器,在默认软件里面浏览器设置成ie即可,其他浏览器不让send密码 ;虽然通过程序把 ...
- linux基础_vi和vim快捷键
(1)拷贝当前行 yy,拷贝当前行向下5行 5yy,并粘贴. (2)删除当前行 dd, 删除当前行向下的5行 5dd. (3)在文件中查找某个单词.[在命令行下使用 /+关键字,回车查找,输入n就是查 ...
- Kubernetes1.16下部署Prometheus+node-exporter+Grafana+AlertManager 监控系统
Prometheus 持久化安装 我们prometheus采用nfs挂载方式来存储数据,同时使用configMap管理配置文件.并且我们将所有的prometheus存储在kube-system #建议 ...
- opengles reference card
https://www.khronos.org/files/opengles31-quick-reference-card.pdf https://www.khronos.org/opengles/s ...