之前LZ寫過一個SLAM依賴庫安裝大全,如果按照之前大全安裝的方式進行安裝,後續在編譯自己的工程時需要連結各種庫檔案和標頭檔,但是具體在CMakeLists.txt裡怎麼使用呢。這篇部落格就準備匯總各種SLAM常用庫的連結方法。
1.添加Eigen標頭檔
Eigen通過apt-get安裝之後,我們要怎麼使用這個依賴庫呢。Eigen有一點很奇怪,Eigen庫只有標頭檔,所以我們在CMakeLists.txt中是不需要寫target_link_libraries,因為我們是通過apt安裝的,所以很容易的知道Eigen庫的位置就是在/usr/include/eigen3
#添加標頭檔include_directories("/usr/include/eigen3")
因為我們已經知道Eigen具體的位置,就不用使用find_package來尋找了,雖然有些粗暴,但是簡單有效。
2.添加Pangolin依賴
Pangolin的安裝也很簡單,功能主要就是做三維的可視化顯示,主要依賴庫是OpenGL,通過apt也很好安裝。
find_package(Pangolin)include_directories(${Pangolin_INCLUDE_DIRS})add_executable(project_name filename.cpp)target_link_libraries(project_name ${Pangolin_LIBRARIES})
3.添加Sophus依賴
Sophus實際上是Eigen庫的擴充模組,Eigen中雖然有幾何模組,但是沒有提供李代數的支援,所以Sophus算是一個比較好的李代數庫,安裝參考之前博文。
find_package(Sophus REQUIRED)include_directories(${Sophus_INCLUDE_DIRS})add_executable(project_name project_name.cpp)target_link_libraries(project_name ${Sophus_LIBRARIES})
4.添加OpenCV依賴
OpenCV經常會出現版本不相容的問題,LZ同時安裝了OpenCV2和OpenCV3兩個版本,所以在CMakeLists.txt要指定OpenCV的版本。
#指定OpenCV的版本是3.1find_package(OpenCV 3.1 REQUIRED)include_directories(${OpenCV_INCLUDE_DIRS})add_executable(project_name filename.cpp)target_link_libraries(project_name ${OpenCV_LIBS})
添加OpenCV要注意一個問題,大小寫。很重要。大小寫。
5.添加PCL依賴
這個點雲庫在SLAM應用中還是蠻重要的,通常情況下好像也都有安裝,安裝很簡單,這裡還是講一下CMakeLists.txt中怎麼寫:
find_package(PCL REQUIRED COMPONENT common io)include_directories(${PCL_INCLUDE_DIRS})add_definitions(${PCL_DEFINITIONS})target_link_libraries(project_name ${PCL_LIBRARIES})
6.添加Ceres依賴
Ceres是Google出品的一個最佳化庫,安裝編譯都在LZ之前寫過一個SLAM安裝大全裡都有。因為Ceres不是常用的庫,所以需要添加一個cmake_modules。LZ這裡把對應的cmake_modules檔案夾中的檔案分享給小夥伴,有需要的可以自行下載。連結: http://pan.baidu.com/s/1o8dTy8i 密碼: zmiv
#這行代碼就是添加尋找Ceres的一個檔案list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)find_package(Ceres REQUIRED)include_directories(${CERES_INCLUDE_DIRS})target_link_libraries(project_name ${CERES_LIBRARIES})
7添加G2O的依賴
其實這個也是千篇一律,換湯不換藥。這裡也是要注意幾個問題,第一個,要在cmake_module中假如findG2O的檔案,連結: http://pan.baidu.com/s/1kVp4Ul5 密碼: yeu4,又需要的小夥伴可以自行下載。第二個,注意大小寫問題,還有數字0和字母0,這個還是要注意的。
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)find_package(G2O REQUIRED)include_directories(${G20_INCLUDE_DIRS})target_link_libraries(project_name g2o_core g2o_stuff)
SLAM的相關依賴庫有很多,而且針對不同的代碼使用的依賴庫是不一樣的,所以,用到一種,LZ也會更新一種,本篇部落格未完待續啦。。。O(∩_∩)O