编译高博十四讲代码遇到依赖项g2o和cholmod的坑
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的坑的更多相关文章
- 高博-《视觉SLAM十四讲》
0 讲座 (1)SLAM定义 对比雷达传感器和视觉传感器的优缺点(主要介绍视觉SLAM) 单目:不知道尺度信息 双目:知道尺度信息,但测量范围根据预定的基线相关 RGBD:知道深度信息,但是深度信息对 ...
- 视觉slam学习之路(一)看高翔十四讲所遇到的问题
目前实验室做机器人,主要分三个方向,定位导航,建图,图像识别,之前做的也是做了下Qt上位机,后面又弄红外识别,因为这学期上课也没怎么花时间在项目,然后导师让我们确定一个方向来,便于以后发论文什么. ...
- 高翔《视觉SLAM十四讲》从理论到实践
目录 第1讲 前言:本书讲什么:如何使用本书: 第2讲 初始SLAM:引子-小萝卜的例子:经典视觉SLAM框架:SLAM问题的数学表述:实践-编程基础: 第3讲 三维空间刚体运动 旋转矩阵:实践-Ei ...
- 视觉slam十四讲第七章课后习题6
版权声明:本文为博主原创文章,转载请注明出处: http://www.cnblogs.com/newneul/p/8545450.html 6.在PnP优化中,将第一个相机的观测也考虑进来,程序应如何 ...
- 视觉slam十四讲第七章课后习题7
版权声明:本文为博主原创文章,转载请注明出处:http://www.cnblogs.com/newneul/p/8544369.html 7.题目要求:在ICP程序中,将空间点也作为优化变量考虑进来 ...
- 逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式
逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式 一丶了解什么是结构体,以及计算结构体成员的对其值以及总大小(类也是这样算) 结构体的特性 1.结构体(struct)是由一系列具有相同类型或不 ...
- 浅读《视觉SLAM十四讲:从理论到实践》--操作1--初识SLAM
下载<视觉SLAM十四讲:从理论到实践>源码:https://github.com/gaoxiang12/slambook 第二讲:初识SLAM 2.4.2 Hello SLAM(书本P2 ...
- 《SLAM十四讲》个人学习知识点梳理
0.引言 从六月末到八月初大概一个月时间一直在啃SLAM十四讲[1]这本书,这本书把SLAM中涉及的基本知识点都涵盖了,所以在这里做一个复习,对这本书自己学到的东西做一个梳理. 书本地址:http:/ ...
- Stanford机器学习---第十四讲.机器学习应用举例之Photo OCR
http://blog.csdn.net/l281865263/article/details/50278745 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归.Oc ...
随机推荐
- 查看主机CPU信息
一.关于CPU的几个概念 CPU的作用 计算机中的中央处理单元(CPU)执行基本的计算工作 -- 运行程序.但是,一个单核的CPU同一时间只能一次执行一个任务,为了提高计算机的处理能力,也就出现了多C ...
- spring boot-10.国际化
1.在原来spring MVC 中国际化实现步骤 (1)编写国际化配置文件 (2)使用ResourceBundleMessageSource管理国际化资源文件 (3)在页面中取国际化信息 2.spri ...
- SpringBoot_02通用mapper
注意:一旦引入了通用Mapper的启动器,会覆盖Mybatis官方启动器的功能,因此需要移除对官方Mybatis启动器的依赖. 无需任何配置就可以使用了.如果有特殊需要,可以到通用mapper官网查看 ...
- P多行溢出省略号的处理
因为-webkit-line-clamp: 2不兼容火狐或IE,采用判断浏览器的方式来启用哪个方式 先判断是什么浏览器 //判断是否是谷歌浏览器 if (!stripos($_SERVER[" ...
- PyCharm专业版下载安装
目录 1. 推荐阅读 2. PyCharm专业版 (目录) 1. 推荐阅读 Python基础入门一文通 | Python2 与Python3及VSCode下载和安装.PyCharm安装.Python在 ...
- C++ 临时对象的生存周期
C++ 临时对象的生存周期是一个不小的坑,参考 C++ standard 第十二章第二节,总结其规则如下: 基本原则:临时变量生存到其所在的完整表达式执行完毕之后(若作为函数参数,则以函数所在的完整表 ...
- CDN杂谈
两大cdn公司:一个是Akamai,一个是LimeLight,所以有两个阵营 CDN在利用DNS的转授权来引导最终访问者找到最理想的缓存或者镜像点,他是一种基于域名的服务.在不同的实现方式下,最终的定 ...
- 023-zabbix性能优化中的几个中肯建议
随着zabbix的广泛应用,少数人的zabbix服务器在性能上出现瓶颈,或者在未来会出现性能方面的瓶颈,接下来讨论几个有效并且简单的优化方案. 服务器硬件 想通过几个简单的配置让服务器提高成倍的性能, ...
- C++ STL(二)vector的用法
##### vector的定义 ```#include <iostream>#include <string>#include <vector>using name ...
- 模拟赛小结:2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest
2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest 2019年10月11日 15:35-20:35(Solved 8,Penalty 675 ...