因OpenCV版本不一致所引發的報錯

2022-07-19 00:54:13 字數 1210 閱讀 8565

目錄今天遇到了乙個很有意思的報錯。

事情是這樣的, 在編譯《視覺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了。

master和minion版本不一致問題

問題 生產環境,不同系統伺服器安裝的salt minion不一致,導致部分功能無效 現像一 1,grains匹配失效 2,高版本python2.6不支援,centos6預設安裝2.6 解決 統一安裝2015.8.13版本 ubuntu16 wget o sudo apt key add deb xe...

cjson庫版本不一致,導致解析失敗

在編譯乙個程式demo的時候,需要繼承乙個第三方庫libexample.so,第三方庫用到了cjson,本身這個程式也用到了cjson,由於兩者用的cjson的版本不一致,導致json解析失敗 第三方庫libexample.so使用的舊版本的cjson,cjson types截圖如下 程式demo使...

NV顯示卡軟體版本不一致執行TensorFlow出錯

當使用nv顯示卡執行tensorflow出錯時,如下 failed s.ok could not find cudnncreate in cudnn dso dlerror cudnn 需要檢查cudnn的版本與cuda的版本一致。否則就會出上面這個錯誤。我這裡使用這兩個版本沒有問題 cuda 8....