SLAM-Sophus模板庫(kù)安裝總結(jié)

【問(wèn)題】由于自己買(mǎi)的書(shū)《視覺(jué)SLAM十四講:從理論到實(shí)踐》彪腔,也就是《視覺(jué)SLAM十四講》的第二版度秘,書(shū)中Sophus庫(kù)用的是模板版本帘不,而之前我下載書(shū)籍代碼是第一版書(shū)籍的代碼倉(cāng)庫(kù)逆趣,沒(méi)辦法箕母,只能重新安裝Sophus庫(kù)(其實(shí)無(wú)論是模板庫(kù)還是非模板庫(kù)都是一樣,只不過(guò)在程序?qū)懛ㄉ嫌行┳兓?砾隅。第二版書(shū)籍代碼倉(cāng)庫(kù)中也有第三方的Sophus代碼包误阻,但是在編譯安裝的時(shí)候,總是報(bào)錯(cuò)。具體每一步報(bào)的錯(cuò)誤究反,我忘記截屏了寻定,只記得過(guò)程。
【結(jié)果】sophus庫(kù)安裝了兩個(gè)版本:模板庫(kù)和非模板庫(kù)精耐。eigen庫(kù)安裝了兩個(gè)版本狼速,一個(gè)是3.2.9的,一個(gè)是3.3.7的卦停。

【模板類(lèi)和非模板類(lèi)的區(qū)別】

至于在使用上的差異唐含,我就不多說(shuō)了。只討論下在安裝過(guò)程中和使用配置上的差異沫浆。模板類(lèi)的Sophus中可以使用不同精度的李群/李代數(shù),而非模板類(lèi)的Sophus只提供雙精度的李群/李代數(shù)滚秩。

git clone https://github.com/strasdat/Sophus.git                  // 首先下載代碼倉(cāng)庫(kù)
cd Sophus
git checkout a621ff                                                              // 切換到對(duì)應(yīng)的版本中去
// a621ff是非模板類(lèi)的版本
// 00f3fd9是2018年的一個(gè)模板類(lèi)的版本                            //這是我安裝的版本
// git checkout master                                                          // 可以切換會(huì)最新的版本
// git log                             // 可以查看提交版本記錄

在非模板類(lèi)中专执,庫(kù)是利用.c.h的方式實(shí)現(xiàn)的;而在模板類(lèi)庫(kù)中是集合在一個(gè).hpp中實(shí)現(xiàn)的

1. 手動(dòng)安裝Eigen-3.3.7庫(kù)

# 在書(shū)籍的第一版中郁油,eigen的安裝十分簡(jiǎn)單:
$ sudo apt-get install libeigen3-dev
# 但是默認(rèn)安裝eigen版本是3.2.9版本的本股,這不滿足模板類(lèi)的Sophus的安裝要求

進(jìn)入Eigen的下載網(wǎng)址,右側(cè)正中有一個(gè)下載鏈接(Get it)桐腌,這里選擇tar.gz.

eigen下載網(wǎng)站

我選擇的是Eigen 3.3.7版本的拄显,懶得找了,就隨便下的這個(gè)最新版本案站。下載完之后躬审,安裝過(guò)程十分簡(jiǎn)單,因?yàn)閑igen也是一個(gè)cmake項(xiàng)目

cd [ path-to-eigen ]
mkdir build
cd build
cmake ..
make
sudo make install

安裝的時(shí)候蟆盐,我看了一下安裝位置承边。通過(guò)apt-get安裝的位置在/usr/include/,但是自己手動(dòng)安裝的eigen3安裝在了/usr/locla/include/文件夾下石挂,所以?xún)烧卟⒉淮嬖跊_突問(wèn)題博助,但是在CMakeLists.txt文件使用find_package()查找?guī)煲欢ㄒ⌒模匀绻褂?code>eigen庫(kù)的時(shí)候痹愚,建議在CMakeLists.txt文件中采用include_directories("/usr/local/include/eigen3")這條指令

2. 安裝模板庫(kù)版本的Sophus

# 安裝本身是十分簡(jiǎn)單的
cd [ path-to-sophus ]
mkdir build
cd build
cmake ..
make
sudo make install

但是這樣的步驟會(huì)導(dǎo)致在/usr/local/include/sophus/中出現(xiàn)對(duì)應(yīng)的兩組頭文件富岳,同時(shí)會(huì)在/usr/local/lib中出現(xiàn)共享庫(kù)的覆蓋問(wèn)題,即libSophus.so文件只能保存一個(gè)版本的共享庫(kù)文件拯腮,根據(jù)對(duì)模板庫(kù)和非模板庫(kù)文件的分析可知窖式,模板庫(kù)只需要頭文件即可,而無(wú)需庫(kù)文件疾瓮,也就是不需要target_link_libraries()脖镀。所以安裝的時(shí)候,需要先安裝模板類(lèi)的Sophus,然后再安裝非模板類(lèi)的Sophus


當(dāng)然你也可以像我這樣做蜒灰,同時(shí)保留模板類(lèi)和非模板類(lèi)的Sophus庫(kù)文件弦蹂,只需要在編譯非模板類(lèi)的時(shí)候,修改下Sophus文件下的CMakeLists.txt文件强窖。

# 將第一行的Sophus替換為SophusNormal
SET(PROJECT_NAME Sophus)
# =====================================================
SET(PROJECT_NAME SophusNormal)

這種情況還是會(huì)產(chǎn)生新的問(wèn)題凸椿,就編譯項(xiàng)目文件的時(shí)候,總是提示無(wú)法找到相關(guān)變量翅溺,未定義的引用


未定義引用

這個(gè)錯(cuò)誤的原因是程序沒(méi)有在系統(tǒng)共享庫(kù)中找到libSophusNormal.so文件脑漫,可以通過(guò)如下操作更新系統(tǒng)共享庫(kù)索引目錄。

# 更新/etc/ld.so.cache文件(庫(kù)配置文件)
$ sudo ldconfig  

3. CMakeLists.txt文件和main.cpp文件中的不同

  • CMakeLists.txt文件
# 非模板類(lèi)庫(kù)咙崎,為了盡可能減少問(wèn)題优幸,盡量將環(huán)境配置完善
cmake_minimum_required( VERSION 2.8 )
project( useSophus )

set(CMAKE_CXX_STANDARD 11)

# 為使用 sophus,您需要使用find_package命令找到它
# include_directories( "/usr/local/include/sophus" )
find_package( Sophus REQUIRED )
include_directories( ${Sophus_INCLUDE_DIRS} )

add_executable( useSophus useSophus.cpp )
# 這里的target_link_libraries()至關(guān)重要
# 因函數(shù)只在頭文件中聲明了褪猛,卻沒(méi)有找到具體的函數(shù)內(nèi)容网杆,會(huì)導(dǎo)致編譯器報(bào)錯(cuò)。因此需要將so包鏈接到項(xiàng)目中來(lái)
# 而根據(jù)書(shū)中第二章內(nèi)容可知伊滋,target_link_libraries()是為了鏈接上對(duì)應(yīng)的共享庫(kù)文件(路徑是“/usr/local/lib”)
target_link_libraries( useSophus SophusNormal )

cmake_minimum_required(VERSION 2.8)
project(useSophus)

set(CMAKE_CXX_STANDARD 11)

# 為使用 sophus碳却,需要使用find_package命令找到它
find_package(Sophus REQUIRED)
include_directories(${Sophus_INCLUDE_DIRS})

add_executable(useSophus useSophus.cpp)
  • main.cpp文件
    在非模板類(lèi)的Sophus庫(kù)中,庫(kù)使用.c笑旺,.h昼浦,而在模板類(lèi)的Sophus庫(kù)中是集合在一個(gè).hpp中實(shí)現(xiàn)的
//引用非模板類(lèi)庫(kù)
#include “sophus/so3.h”
#include “sophus/se3.h”

//引用模板類(lèi)庫(kù)
#include “sophus/so3.hpp”
#include “sophus/se3.hpp”

參考資料

【0】Sophus代碼倉(cāng)庫(kù):開(kāi)發(fā)Sophus這個(gè)庫(kù)的小哥哥酷酷的
【1】李群與李代數(shù)及Sophus的安裝使用:該博主安裝的sophus版本是非模板類(lèi)的
【2】libXXX.so.X: cannot open shared object file: No such file:解決共享庫(kù)索引不到問(wèn)題
【3】Sophus庫(kù)CMakeLists.txt內(nèi)容詳解筆記:對(duì)CMakeLists.txt解析清晰
【4】Sopus庫(kù)中FindEigen3.cmake內(nèi)容詳解筆記
【5】ubuntu16.04+eigen3安裝:這篇博客提示了幾個(gè)重要的文件路徑,至于文章中關(guān)于怎么安裝的操作可以忽視
【6】Sophus庫(kù)模板類(lèi)的使用問(wèn)題:闡述了模板類(lèi)和非模板類(lèi)的不同筒主,特別是文件結(jié)構(gòu)上的差異辨析
【7】Sophus-issues187:這里討論了libeigen3-dev的版本問(wèn)題

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末关噪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子乌妙,更是在濱河造成了極大的恐慌色洞,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冠胯,死亡現(xiàn)場(chǎng)離奇詭異火诸,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)荠察,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)置蜀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人悉盆,你說(shuō)我怎么就攤上這事盯荤。” “怎么了焕盟?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵秋秤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)灼卢,這世上最難降的妖魔是什么绍哎? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮鞋真,結(jié)果婚禮上崇堰,老公的妹妹穿的比我還像新娘。我一直安慰自己涩咖,他們只是感情好海诲,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著檩互,像睡著了一般特幔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上闸昨,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天敬辣,我揣著相機(jī)與錄音,去河邊找鬼零院。 笑死,一個(gè)胖子當(dāng)著我的面吹牛村刨,可吹牛的內(nèi)容都是我干的告抄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼嵌牺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼打洼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起逆粹,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤募疮,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后僻弹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體阿浓,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年蹋绽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芭毙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡卸耘,死狀恐怖退敦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蚣抗,我是刑警寧澤侈百,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響钝域,放射性物質(zhì)發(fā)生泄漏讽坏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一网梢、第九天 我趴在偏房一處隱蔽的房頂上張望震缭。 院中可真熱鬧,春花似錦战虏、人聲如沸拣宰。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)巡社。三九已至,卻和暖如春手趣,著一層夾襖步出監(jiān)牢的瞬間晌该,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工绿渣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留朝群,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓中符,卻偏偏與公主長(zhǎng)得像姜胖,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子淀散,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容