因OpenCV版本不一致所引发的报错
目錄
- 一 因OpenCV版本不一致所引發(fā)的報錯
注:原創(chuàng)不易,轉(zhuǎn)載請務(wù)必注明原作者和出處,感謝支持!
一 因OpenCV版本不一致所引發(fā)的報錯
今天遇到了一個很有意思的報錯。
事情是這樣的, 在編譯《視覺SLAM十四講》第12章的一個程序時,編譯器報了“未定義的引用”的錯誤。該程序使用了DBoW3這個庫,而這個庫又是依賴OpenCV的。DBoW3這個庫經(jīng)過編譯之后會生成一個靜態(tài)鏈接庫并被安裝在/usr/local/lib路徑下。
未定義的引用錯誤使我我意識到這是鏈接庫出了問題。經(jīng)過一番折騰,發(fā)現(xiàn)原因是這樣的。我的虛擬機(jī)里安裝的是最新的OpenCV 4.1.1版本,但同時也安裝了ROS,而ROS里自帶了一個OpenCV 3.3.1的版本。在編譯DBoW3庫的時候,不知是何原因,cmake搜索到的是3.3.1版本的OpenCV,因此DBoW3的鏈接庫鏈接的是3.3.1版本的OpenCV動態(tài)庫。但是第12章里的程序所引用的卻是4.1.1版本的OpenCV的頭文件,所以在去鏈接DBoW3的靜態(tài)庫的時候自然就報了未定義的引用的錯誤了。
于是,修改DBoW3的CMakeLists.txt文件,使用OpenCV 4.1.1作為其依賴,重新編譯并安裝DBoW3庫,問題得以解決!
順便再多啰嗦幾句,我查看了cmake的CMAKE_MODULE_PATH變量的內(nèi)容,發(fā)現(xiàn)它指向的路徑是/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了。
轉(zhuǎn)載于:https://www.cnblogs.com/laizhenghong2012/p/11311354.html
總結(jié)
以上是生活随笔為你收集整理的因OpenCV版本不一致所引发的报错的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: failed to find romfi
- 下一篇: hdu 2454 Degree Sequ