linux:編譯、使用共享庫Sophus

編譯、使用共享庫


在學習SLAM過程中需要用到Sophus庫來計算李羣李代數這些。

下文將描述如何從github下載該庫並且使用該庫

一、下載和驗證(書中要求使用非模板類的Sophus庫)

git clone https://github.com/strasdat/Sophus.git
cd Sophus
git checkout a621ff

二、編譯 

mkdir built
cmake ..
make

三、安裝(這一步可選,如果安裝,那麼後面的操作要方便一些)

sudo make install

安裝完後會輸出如下:

  • 實際上就是將頭文件放到系統的include目錄下,把庫文件放到系統的lib目錄下

 四、配置include環境變量(沒有執行上一步的安裝操作的需要這一步)

在.bashrc 或者 .zshrc 文件末尾加上 Sophus的頭文件目錄

添加內容如下: 

#頭文件目錄 (路徑自行更換)
CPLUS_INCLUDE_PATH=/home/msi/SLAM/Sophus:$CPLUS_INCLUDE_PATH
export CPLUS_INCLUDE_PATH 

五、配置動態庫環境變量(這個配置是運行可執行文件時所需,不是編譯時的)

如果這一步沒有配置,運行可執行文件時會出現如下:

在.bashrc 或者 .zshrc 文件末尾加上編譯Sophus時生成.so文件的目錄

添加內容如下:

#找到動態鏈接庫的路徑
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/msi/SLAM/Sophus/build
export LD_LIBRARY_PAT

六、編譯可執行文件

假如我們有這樣一個.cpp文件,現在需要編譯成可執行文件

#include<iostream>
using namespace std;
#include<math.h>
#include<eigen3/Eigen/Core>
#include<eigen3/Eigen/Geometry>

#include"sophus/so3.h"
#include"sophus/se3.h"

int main(int argc,char **argv)
{
    //沿z軸旋轉90度的旋轉矩陣
    Eigen::Matrix3d R=Eigen::AngleAxisd(M_PI/2,Eigen::Vector3d(0,0,1)).toRotationMatrix();
    
    //SO(3)構造方法1:直接從旋轉矩陣構造
    Sophus::SO3 SO3_R(R);
    //SO(3)構造方法2:從旋轉向量構造
    Sophus::SO3 SO3_v(0,0,M_PI/2);
    //SO(3)構造方法3:從四元數構造
    Eigen::Quaterniond q(R);
    Sophus::SO3 SO3_q(q);
    //輸出時,以李代數so(3)形式輸出的
    cout<<"SO3 from matrix"<<SO3_R<<endl;
    cout<<"SO3 from vetor:"<<SO3_v<<endl;
    cout<<"SO3 from quaternion:"<<SO3_q<<endl;
}

方法一:執行如下命令編譯(這個是針對執行了第三步安裝操作才這樣用的):

g++ Sophus.cpp -lSophus -o Sophus

方法二:執行如下命令編譯(這個是針對沒有進行第三步安裝操作的)(路徑需要改爲第二步編譯出來的.so所在目錄):

g++ Sophus.cpp  -L /home/msi/SLAM/Sophus/build/ -lSophus -o Sophus

方法三:編寫CMakeLists.txt

  • 這個就有點玄妙了,自動尋找Sophus庫路徑,然後生成兩個變量,進行編譯和鏈接
  • 編譯出來的程序可直接運行而不依賴第五步
cmake_minimum_required(VERSION 2.8)
find_package(Sophus REQUIRED)
message(STATUS ${Sophus_LIBRARIES})
include_directories(${Sophus_INCLUDE_DIRS})

add_executable(Sophus Sophus.cpp)
target_link_libraries(Sophus ${Sophus_LIBRARIES})

 

六、關於使用vim,ycm下自動補全,則需在ycm目錄下的.ycm_extra_conf.py 中加上Sophus的頭文件目錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章