問題1:
在編譯視覺slam十四講第九講的時候,出現如下錯誤: undefined reference tocv::string::allocate(unsigned long)' cmakefiles/run_vo.dir/run_vo.cpp.o: in function
cv::mat::~mat()』:.詳細錯誤如下圖:
問題2:
通過建立opencv3.1的靜態連線後解決了上述問題,再次編譯,又出現:could not find cuda: found unsuitable version 「7.5」, but required is exact version 「8.0」 (found /usr)的報錯,這是由於我系統安裝了兩個cuda版本cuda7.5和cuda8,系統預設的軟鏈結為cuda7.5.而錯誤提示需要用cuda8.0.為了不破壞系統原有的軟鏈結,考慮直接在cmake過程中鏈結cuda8.0.
問題1:
第一步:查詢opencvconfig.cmake的位址.
locate opencvconfig.cmake
原理:由於cmakelists中的find_package(opencv required)會在ubuntu系統中找到opencvconfig.cmake,該檔案中包含了opencv_include_dirs和opencv_libs 等變數,從而通過 include_directories和target_link_libraries來訪問這兩個變數。所以找到原始碼編譯的opencv3.1中的opencvconfig.cmake位址.
第二步:修改cmakelists中opencv的軟鏈結.
set(opencv_dir /home/canfly/downloads/opencv-3.1.0/build/) //設定opencvconfig.cmake的位址
find_package(opencv required) //在設定的位址下,查詢opencv
include_directories($) //新增引用目錄
原理:在cmake中設定opencv的查詢位址為原始碼編譯的新位址,從而可以繼續使用cmakelists原來的find_package()等函式.
第三步:重新cmake和make
cmake ..
make
到此,第乙個問題opencv的問題解決爆出第二個cuda版本不對的問題.
解決思路就是連線正確的cuda版本位址.
問題2:
cat /usr/local/cuda/version.txt //查詢cuda版本
cmake -d cuda_toolkit_root_dir=/usr/local/cuda-8.0 .. //原理參考連線3
本問題主要集中在如何在cmakelists.txt中設定opencv的軟鏈結.通過類似方法,對於eigen,ceres和g2o等第三方軟體都可以直接設定對應的鏈結位址.不用在糾結到底軟體裝在哪了.
參考:
ubuntu中使用cmake鏈結opencv庫的兩種方法
ubuntu16.04檢視opencv安裝路徑以及版本號
cmake error: could not find cuda-unsuitable version 「8.0」,but required is exact version 「9.0」
ubuntu下安裝cmake及cmake簡單使用
前言 最近突然想將開發環境轉移到linux上,同時也準備閱讀些github上的開源 發現現在開源專案一般都是用cmake管理的。所以就在自己的虛擬機器上搗鼓了一天。一開始我也不知道cmake是啥,後來通過折騰也大概知道其作用,它所做的事其實就是告訴編譯器如何去編譯鏈結源 你也許想問不是有makefi...
ubuntu下更新cmake版本
1 解除安裝當前舊版本的cmake 檢視當前的cmake版本 cmake version 若版本較舊,執行 sudo apt remove cmake,解除安裝舊版的cmake 若當前系統無cmake,可跳過這一步。2 安裝依賴 sudo apt install build essential li...
ubuntu下cmake管理c 工程
cmake 是乙個跨平台的自動化建構系統,它使用乙個名為 cmakelists.txt 的檔案來描述構建過程,可以產生標準的構建檔案,如 unix 的 makefile 或windows visual c 的 projects workspaces 檔案 cmakelists.txt 需要手工編寫,...