1. 找不到g2o库!在CMakeLists.txt中使用指令 message(STATUS "${G2O_FOUND}") 打印结果为NO。

问题描述:

CMakeLists.txt 中采用如下命令寻找g2o库。

# g2o
find_package( G2O REQUIRED )
include_directories( ${G2O_INCLUDE_DIRS} )

科普时间:find_package() 会在模块路径中寻找FindNAME.cmake文件,再经由此文件寻找库所有文件,包括头文件,静态库(*.a),动态库(*.so),这种查找方法称为模块模式。更多详情参考此链接

由于我把g2o安装在 /usr/local/g2o 路径中,不在FindNAME.cmake的默认查找路径中,因此一直找不到。

解决方法:

在CMakeLists.txt中进行修改,如下所示,

set(CMAKE_PREFIX_PATH "/usr/local/g2o")
find_package( G2O REQUIRED )
message(STATUS "${G2O_INCLUDE_DIR}")
include_directories( ${G2O_INCLUDE_DIR} )

同时在FindG2O.cmake中,将 NO_DEFAULT_PATH 注释掉。如下所示,

FIND_PATH(G2O_INCLUDE_DIR g2o/core/base_vertex.h
${G2O_ROOT}/include
$ENV{G2O_ROOT}/include
/usr/local/include
...
#NO_DEFAULT_PATH
)

如果指定了NO_DEFAULT_PATH选项,所有NO_*选项都会被激活,导致 set(CMAKE_PREFIX_PATH "/usr/local/g2o") 设置的路径被跳过。

2. 运行make进行编译时,出现如下报错,

/usr/bin/ld: cannot find -lg2o_core
/usr/bin/ld: cannot find -lg2o_stuff
/usr/bin/ld: cannot find -lg2o_types_slam3d

问题描述:

编译执行文件时使用 target_link_libraries() 链接上述三个动态库文件,在 /usr/local/g2o/lib 中可以找到这些文件,从报错可以判断应该是找不到正确的链接路径。

解决方法:

在CMakeList.txt中添加如下命令行,设置动态库所在的绝对路径。

link_directories("/usr/local/g2o/lib")

关于在cmake中添加头文件目录,链接动态库、静态库的操作参考这个链接

3. 运行make编译代码,报错如下,

/home/gordon/kalibr_ws/devel/lib/libcholmod.a(cholmod_super_numeric.o): In function `cholmod_super_numeric':
cholmod_super_numeric.c:(.text+0xe78): undefined reference to `dsyrk_'
cholmod_super_numeric.c:(.text+0xf76): undefined reference to `dgemm_'
cholmod_super_numeric.c:(.text+0x129c): undefined reference to `dpotrf_'
cholmod_super_numeric.c:(.text+0x13a2): undefined reference to `dtrsm_'
cholmod_super_numeric.c:(.text+0x1dd6): undefined reference to `zherk_'
cholmod_super_numeric.c:(.text+0x1ed4): undefined reference to `zgemm_'
cholmod_super_numeric.c:(.text+0x2286): undefined reference to `zpotrf_'
cholmod_super_numeric.c:(.text+0x23b2): undefined reference to `ztrsm_'
cholmod_super_numeric.c:(.text+0x2dcb): undefined reference to `zherk_'
cholmod_super_numeric.c:(.text+0x2ec9): undefined reference to `zgemm_'
cholmod_super_numeric.c:(.text+0x325c): undefined reference to `zpotrf_'
cholmod_super_numeric.c:(.text+0x337c): undefined reference to `ztrsm_'
/home/gordon/kalibr_ws/devel/lib/libcholmod.a(cholmod_super_solve.o): In function `cholmod_super_lsolve':
cholmod_super_solve.c:(.text+0x548): undefined reference to `ztrsm_'
cholmod_super_solve.c:(.text+0x5f2): undefined reference to `zgemm_'
cholmod_super_solve.c:(.text+0x876): undefined reference to `dtrsm_'
cholmod_super_solve.c:(.text+0x91d): undefined reference to `dgemm_'
cholmod_super_solve.c:(.text+0xad0): undefined reference to `dtrsv_'
cholmod_super_solve.c:(.text+0xb5c): undefined reference to `dgemv_'
cholmod_super_solve.c:(.text+0xcc6): undefined reference to `ztrsv_'
cholmod_super_solve.c:(.text+0xd55): undefined reference to `zgemv_'
/home/gordon/kalibr_ws/devel/lib/libcholmod.a(cholmod_super_solve.o): In function `cholmod_super_ltsolve':
cholmod_super_solve.c:(.text+0x133b): undefined reference to `zgemm_'
cholmod_super_solve.c:(.text+0x13c9): undefined reference to `ztrsm_'
cholmod_super_solve.c:(.text+0x169a): undefined reference to `dgemm_'
cholmod_super_solve.c:(.text+0x1721): undefined reference to `dtrsm_'
cholmod_super_solve.c:(.text+0x18bf): undefined reference to `dgemv_'
cholmod_super_solve.c:(.text+0x1912): undefined reference to `dtrsv_'
cholmod_super_solve.c:(.text+0x1a9d): undefined reference to `zgemv_'
cholmod_super_solve.c:(.text+0x1af7): undefined reference to `ztrsv_'

问题描述:

由报错第一行可以判定该报错与Cholmod库有关。无法正确链接Cholmod库。

查看cmake输出内容,如下所示,

Found CHOLMOD: /home/gordon/kalibr_ws/devel/include/suitesparse 

可以确定寻找cholmod库的结果是suitesparse库(目前不清楚这两个库的关系,先将它们等同起来)。我之前在kalibr_ws中安装了suitesparse库,同时,g2o的readme.md也让我在根目录下安装了suitesparse库。想到kalibr_ws是采用catkin_build编译的,其架构跟cmake必定不一致,因此尝试换成根目录下的库。

解决方法:

在 ~/.bashrc 中去除kalibr_ws的环境变量,重启终端。可通过 echo $PATH 命令查看该环境变量是否被移除。或者,暂时将kalibr_ws中的devel文件夹暂时移除。使用 cmake 重新链接库文件,得到如下结果,

Found CHOLMOD: /usr/include/suitesparse 

至此即可编译成功。

编译高博十四讲代码遇到依赖项g2o和cholmod的坑的更多相关文章

  1. 高博-《视觉SLAM十四讲》

    0 讲座 (1)SLAM定义 对比雷达传感器和视觉传感器的优缺点(主要介绍视觉SLAM) 单目:不知道尺度信息 双目:知道尺度信息,但测量范围根据预定的基线相关 RGBD:知道深度信息,但是深度信息对 ...

  2. 视觉slam学习之路(一)看高翔十四讲所遇到的问题

      目前实验室做机器人,主要分三个方向,定位导航,建图,图像识别,之前做的也是做了下Qt上位机,后面又弄红外识别,因为这学期上课也没怎么花时间在项目,然后导师让我们确定一个方向来,便于以后发论文什么. ...

  3. 高翔《视觉SLAM十四讲》从理论到实践

    目录 第1讲 前言:本书讲什么:如何使用本书: 第2讲 初始SLAM:引子-小萝卜的例子:经典视觉SLAM框架:SLAM问题的数学表述:实践-编程基础: 第3讲 三维空间刚体运动 旋转矩阵:实践-Ei ...

  4. 视觉slam十四讲第七章课后习题6

    版权声明:本文为博主原创文章,转载请注明出处: http://www.cnblogs.com/newneul/p/8545450.html 6.在PnP优化中,将第一个相机的观测也考虑进来,程序应如何 ...

  5. 视觉slam十四讲第七章课后习题7

    版权声明:本文为博主原创文章,转载请注明出处:http://www.cnblogs.com/newneul/p/8544369.html  7.题目要求:在ICP程序中,将空间点也作为优化变量考虑进来 ...

  6. 逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式

    逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式 一丶了解什么是结构体,以及计算结构体成员的对其值以及总大小(类也是这样算) 结构体的特性 1.结构体(struct)是由一系列具有相同类型或不 ...

  7. 浅读《视觉SLAM十四讲:从理论到实践》--操作1--初识SLAM

    下载<视觉SLAM十四讲:从理论到实践>源码:https://github.com/gaoxiang12/slambook 第二讲:初识SLAM 2.4.2 Hello SLAM(书本P2 ...

  8. 《SLAM十四讲》个人学习知识点梳理

    0.引言 从六月末到八月初大概一个月时间一直在啃SLAM十四讲[1]这本书,这本书把SLAM中涉及的基本知识点都涵盖了,所以在这里做一个复习,对这本书自己学到的东西做一个梳理. 书本地址:http:/ ...

  9. Stanford机器学习---第十四讲.机器学习应用举例之Photo OCR

    http://blog.csdn.net/l281865263/article/details/50278745 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归.Oc ...

随机推荐

  1. windows编程 使用C++实现多线程类

    有时候我们想在一个类中实现多线程,主线程在某些时刻获得数据,可以“通知”子线程去处理,然后把结果返回.下面的实例是主线程每隔2s产生10个随机数,将这10随机数传给多线程类,让它接收到数据后马上打印出 ...

  2. c++工厂模式和多线程结合

    void a::create() { Function *f1 = m_functionmanager.CreateFunction(1);Function *f2 = m_functionmanag ...

  3. 2019JAVA第五次实验报告

    Java实验报告 班级 计科二班 学号 20188442 姓名 吴怡君 完成时间2019/10/11 评分等级 实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. ...

  4. Tomcat配置:java.lang.UnsatisfiedLinkError: D:\DevelopTool\tool20150402\tomcat\apache-tomcat-8.5.16\bin\tcnative-1.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform

    解决办法: tomcat启动时提示java.lang.UnsatisfiedLinkError: D:\soft\devTool\apache-tomcat-7.0.57\bin\tcnative-1 ...

  5. 【洛谷p1781】宇宙总统

    宇宙总统[题目链接] 关于题目算法,其实就是考排序,那我们直接sort不就好啦,显然不能. 这个题让我重新认识了cmp函数: 以下是我的心路历程: 看到这个题,嗯?这么简单的吗,我直接sort不就好啦 ...

  6. vue单页应用首次加载太慢之性能优化

    问题描述: 最近开发了一个单页应用,上线后发现页面初始加载要20s才能完成,这就很影响用户体验了,于是分析原因,发现页面加载时有个 vendor.js达到了3000多kb,于是在网上查找了一下原因,是 ...

  7. vue.js(3)--v-bind与v-on

    vue中的v-bind与v-on的使用 (1)实例 <!DOCTYPE html> <html lang="en"> <head> <me ...

  8. SpringBoot项目中遇到的BUG

    1.启动项目的时候报错 1.Error starting ApplicationContext. To display the auto-configuration report re-run you ...

  9. Python爬虫之定时抢购淘宝商品

    Python爬虫之定时抢购淘宝商品 import time from selenium import webdriver import datetime class Spider: def __ini ...

  10. (一)老毛桃U盘启动盘制作

    制作U盘启动盘前,一定要将U盘数据进行备份.U盘启动盘制作步骤: 1. 到老毛桃官网上下载U盘制作程序http://www.laomaotao.org.cn/. 2. 双击运行安装包,设置安装路径. ...