概述
编译、使用共享库
在学习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的头文件目录
最后
以上就是甜美小松鼠为你收集整理的linux:编译、使用共享库Sophus的全部内容,希望文章能够帮你解决linux:编译、使用共享库Sophus所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复