因OpenCV版本不一致所引发的报错
目錄
- 一 因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了。
轉載于:https://www.cnblogs.com/laizhenghong2012/p/11311354.html
總結
以上是生活随笔為你收集整理的因OpenCV版本不一致所引发的报错的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: failed to find romfi
- 下一篇: [Linux]F5负载均衡器