VSLAM依赖库版本配置(CMake)

在开发VSLAM程序的过程中,我需要不断地学习开源程序,如ORB-SLAM2、SVO、LSD-SLAM、DSO、LearnVIORB、ygz-stereo-inertial、svo_degelet、ORB-TGZ-SLAM等等,其中依赖的库较多,主要的有OpenCV、g2o、eigen3、Sophus等。

不同的程序使用的版本往往不一样,由于需要学习不同的开源程序并转化为自己的知识,进而开发自己的 程序,因此,无法在ubuntu系统中安装一个版本适应所有开源程序。因此,需要配置选择安装于系统之外的依赖库,本博客暂时介绍OpenCV、g2o、eigen3的配置选择方法。

1 OpenCV

1.1 安装OpenCV时

注意使用-D CMAKE_INSTALL_PREFIX设置安装路径。

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/somepath/local ..

to build with modules from opencv_contrib set OPENCV_EXTRA_MODULES_PATH to <path to opencv_contrib/modules/>

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/somepath/local -D OPENCV_EXTRA_MODULES_PATH=/somepath/opencv_contrib/modules/ ..

示例:

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/home/huicanlin/Downloads/software/opencv-3.2.0/local -D OPENCV_EXTRA_MODULES_PATH=/home/huicanlin/Downloads/software/opencv-3.2.0/opencv_contrib-3.2.0/modules/ ..

1.2 配置VSLAM程序CMakeLists.txt

在FIND_PACKAGE()之前,设置OpenCV_DIR,如下所示:

set(OpenCV_DIR "/home/huicanlin/Downloads/software/opencv-2.4.13.5/local/share/OpenCV/")#huicanlin
FIND_PACKAGE(OpenCV REQUIRED)

2 g2o

2.1安装g2o时

cd workspace
git clone https://github.com/RainerKuemmerle/g2o.git
cd g2o
mkdir build
cd build
cmake ..
make
sudo make install

If you don‘t want to make a system install, then you can replace the cmake command with

cmake .. -DCMAKE_INSTALL_PREFIX:PATH=$HOME/installdir

例如在2.2时,我是这么做的:

cmake .. -DCMAKE_INSTALL_PREFIX:PATH=../local

2.2使用g2o时

在FIND_PACKAGE()之前,设置G2O_ROOT,如下所示:

set(G2O_ROOT "/home/huicanlin/src/svo_edgelet/Thirdparty/g2o/local/")#$HOME/installdir
FIND_PACKAGE(G2O REQUIRED)

可能需要如下操作,才能生效:

cd ..
rm -r build
mkdir build
cd build
cmake ..

2.3 碰到问题

在调试高翔的slambook的ch10的g2o_custombundle的时候,原CMakeLists.txt关于g2o的配置:

set(G2O_ROOT "/home/huicanlin/src/slambook/3rdparty/g2o/local/") # huicanlin added.Find_Package(G2O REQUIRED)include_directories( ${G2O_INCLUDE_DIR} )   # huicanlin added.
SET(G2O_LIBS ... g2o_core g2o_interface ...)target_link_libraries(... ${G2O_LIBS} ...)
make的时候,有个.h文件找不到.因此在Find_Package()下面,加了如上所示的一行;为了与高翔提供的g2o版本一致,又在Find_Package()上面,加了如上所示的1行.make能够通过。但是,运行的时候出现错误:Segmentation fault,在gdb中调试,发现问题来自:/opt/ros/indigo/lib/libg2o_core.so.

我分析错误在于“SET(G2O_LIBS ... g2o_core g2o_interface ...)”的时候,其实指向了ROS下的.so文件,也就是说,include的是Find_Package()找到的文件,但是库文件却是ROS下的。若是版本不同,容易出现错误。

修改方法:将g2o_core改为${G2O_CORE_LIBRARY}
SET(G2O_LIBS ... ${G2O_CORE_LIBRARY} g2o_interface ...)

然后重新编译:

rm -r /buildcd buildcmake ..make -j4

再次运行就没问题了。

3 eigen3

3.1 安装时

cmake .. -DCMAKE_INSTALL_PREFIX:PATH=../local

3.2 使用时

#set(EIGEN3_INCLUDE_DIR "/home/huicanlin/Downloads/software/eigen-3.2.10/local/include/eigen3/")find_package(Eigen3 REQUIRED)


以下4-7为编译S-PTAM时需要的依赖:

4 DBow2

4.1安装

git clone [email protected]:dorian3d/DBoW2.git

Tested until commit 82401cad2cfe7aa28ee6f6afb01ce3ffa0f59b44

git checkout 82401cad2cfe7aa28ee6f6afb01ce3ffa0f59b44

mkdir build

cd build

cmake .. -DCMAKE_INSTALL_PREFIX:PATH=../local

make -j4

make install

4.2 使用

set(DBoW2_DIR "../../Thirdparty/DBoW2/build") #DBoW2Config.cmake,其它路径,有此文件即可
find_package(DBoW2 REQUIRED)

5 Dlib

5.1 安装

git clone [email protected]:dorian3d/DLib.git
Tested until commit 70089a38056e8aebd5a2ebacbcb67d3751433f32
git checkout 70089a38056e8aebd5a2ebacbcb67d3751433f32
mkidr build
cd buildcmake .. -DCMAKE_INSTALL_PREFIX:PATH=../localmake -j4make install

5.2 使用

set(DLib_DIR "../../Thirdparty/DLib/build") #DLibConfig.cmake,其它路径,有此文件即可
find_package(DLib REQUIRED)

6 DLoopDetector

6.1安装

git clone [email protected]:dorian3d/DLoopDetector.git
Tested until commit 8e62f8ae84d583d9ab67796f779272b0850571ce
git checkout 8e62f8ae84d583d9ab67796f779272b0850571ce
mkidr build
cd buildcmake .. -DCMAKE_INSTALL_PREFIX:PATH=../localmake -j4make install

6.2 使用

set(DLoopDetector_DIR "../../Thirdparty/DLoopDetector/build") #huicanlin
find_package(DLoopDetector REQUIRED)

7 opengv

7.1 安装

git clone [email protected]:laurentkneip/opengv.git
Tested until commit 2e2d21917fd2fb75f2134e6d5be7a2536cbc7eb1
git checkout 2e2d21917fd2fb75f2134e6d5be7a2536cbc7eb1mkidr buildcd buildcmake .. -DCMAKE_INSTALL_PREFIX:PATH=../localmake -j4make install

7.2 使用

set(OPENGV_ROOT "/home/huicanlin/catkin_ws/src/sptam/Thirdparty/g2o/local/")#$HOME/installdir
find_package(OpenGV REQUIRED)

8 gtsam

8.1 安装

源码使用高翔的slambook/3rdparty/gtsam

cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/home/huicanlin/src/slambook/3rdparty/gtsam/local/

make -j4

make install

注意:安装路径必须时绝对路径,否则会报错!

8.2 使用

使用示例,高翔的slambook/ch11:

注意:前两行是我在cmake ..的时候,根据Terminal报错的提示增加的,如此才能够编译通过。

set(GTSAM_DIR "/home/huicanlin/src/slambook/3rdparty/gtsam/local/lib/cmake/GTSAM/") # huicanlin set(GTSAMCMakeTools_DIR "/home/huicanlin/src/slambook/3rdparty/gtsam/local/lib/cmake/GTSAMCMakeTools/") # huicanlin find_package( GTSAMCMakeTools ) find_package( GTSAM REQUIRED ) include_directories( ${GTSAM_INCLUDE_DIR} )

Find_Package(G2O REQUIRED)

原文地址:https://www.cnblogs.com/huicanlin/p/8232412.html

时间: 2024-11-02 18:16:02

VSLAM依赖库版本配置(CMake)的相关文章

linux下依赖库的版本问题引起的安装失败:libssl-dev版本问题无法安装 :libssl-dev : 依赖: libssl1.0.0 (= 1.0.1-4ubuntu3) 但是 1.0.1-4ubuntu5.31 正要被安装

依赖库版本问题引起的安装失败解决方法如下有两种: 1.是由于源需要更新,如下操作: libssl-dev : 依赖: libssl0.9.8 (= 0.9.8o-1ubuntu4) 但是 0.9.8o-1ubuntu4.4 正要被安装 解决方法 进入“系统->系统管理->更新管理器->设置”,在弹出的“软件源”对话框中选“更新”标签页,选中“Ubuntu 更新”下面的四个复选框,关闭后 在终端先执行“sudo apt-get update”就ok了. 转自:http://baalwolf

CMake的简单使用(二) - 链接依赖库

这里我引入的依赖库是ncurses, 用的是ncurses的HelloWorld例子. (具体的编译ncurses过程这里不再赘述) 先把目录结构罗列下. 深层次的我就不继续展开了, 都是编译生成的头文件和库文件. 接下来先看下我们的HelloWorld.c 1 /* 2 * Filename : HelloWorld.c 3 * Description : a CMake ncurses demo 4 * Author : loop0day 5 * Created : 2018 Apr 04

如何使用CocoaPods安装使用及配置私有库以及管理依赖库 【原创】

CocoaPods是什么 在iOS开发中势必会用到一些第三方依赖库,比如大家都熟悉的ASIHttpRequest.AFNetworking.JSONKit等.使用这些第三方类库能极大的方便项目的开发,但是,集成这些依赖库需要我们手动去配置,例如集成ASIHttpRequest库时除了加入源码以外还需要手动去添加一些系统框架,比如CFNetwork.MobileCoreServices等,如果这些第三方库发生了更新,还需要手动去更新项目.这就显得非常麻烦.有麻烦自然有解决办法,CocoaPods就

升级cocoapods 0.36.0之后,解决更新的部分依赖库,不是最新版本的问题

在升级到cocoapods 0.36.0之后,使用原本podfile配置,在重新执行pod install之后,一些依赖库的版本,低于github上的最新版本.可按照下列配置.指定git,强制使用最新版本 source 'https://github.com/CocoaPods/Specs.git' platform :ios, '6.1' pod 'IQKeyboardManager', :git => "https://github.com/hackiftekhar/IQKeyboar

Qt程序发行Linux版,软件打包知识(patchelf 工具修改依赖库,确认 qmake -v 是自己使用的Qt版本,否则用export PATH进行修改)good

patchelf 工具可以修改已编译运行程序的依赖库位置和指定库链接器 patchelf --set-rpath patchelf --set-interpreter 通过这个工具 https://github.com/probonopd/linuxdeployqt 如果自己编译不了,也可以下载现成的 https://github.com/probonopd/linuxdeployqt/releases 运行 ./linuxdeployqt-2-x86_64.AppImage ShanbayDi

AppCan应用打包关于缺少XMPP的依赖库libresolv.dylib--升级引擎版本到3.1以上

AppCan打包的报错信息中 关于缺少XMPP的依赖库libresolv.dylib.在打包静态库的时候不允许加入动态库,但是打包的错误提示信息 说缺少依赖库.Undefined symbols for architecture armv7:  "_dns_parse_resource_record", referenced from:     -[XMPPSRVResolver processRecord:length:] in libuexEaseMob.a(XMPPSRVReso

AndroidStudio在线搜索最新版本的依赖库

操作步骤 打开File–>Project Structure 选中当前项目,点击Denpendencies标签 点击+,选Library dependency 打开界面如下: 输入想要的依赖库部分字符,比如design,然后点击右侧的搜索图标 搜索结果如下: 备注 此方法搜索的是最新版本的依赖库,可能高于当前项目的编译版本. 所以添加的依赖库版本号,应修改为项目创建时自动添加的appcompat-v7的版本号[适用于RecyclerView.CardView.design]. 参考资料 Andr

linux下编译qt5.6.0静态库——configure配置

 随笔 - 116  文章 - 4  评论 - 7 linux下编译qt5.6.0静态库--configure配置 linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberry选项: Android 选项: 生成makefile 遇到链接检查失败的情况 生成makefile后进行编译 编译时的错误 多重定义'QT_MODBUS()'和'QT_MODBU

VS2012中使用CEGUI项目发布到XP平台的问题(核心方法就一句话。“你项目使用的所有外部依赖库都用/MT编译。”)

接着上一篇文章,详细说说如何把一个带CEGUI的项目发布到XP平台. 这个问题纠缠了我好几天.这里把详细解决思路记下来.有同样问题的朋友可以少走很多弯路. 核心方法就一句话.“你项目使用的所有外部依赖库都用/MT编译.” 1.准备. 首先你要具备如下工具:CEGUI源码:FreeType源码:Pcre源码:CMake工具.我会在下文说明原因. 各个开源库的版本号,请参考你的CEGUI引用的各自的头文件分别下载. FreeType开源库主页:http://sourceforge.net/proje