eigen冲突 sophus 安装_十四讲 Eigen和Sophus得版本冲突问题___超长历程_weixin_39616056的博客-程序员宅基地

技术标签: eigen冲突 sophus 安装  

很久后来更新如下:

现在看十四讲第二版,按第二版里自带的第三方库安装没有任何冲突问题,所以出现版本冲突可以去试着装第二版的库,高翔博士的GitHub上就有。

原答案

eigen安装:

问题: 如果直接用sudo apt-get install libeigen3-dev,安装的是3.2.92版本,到后边安装Sophus时,最低要求Eigen3.3.0版本,即便用update也没用,但是如果直接安装高于3.3.0的版本,安装Ceres时又不行了,版本又太高

经过一番波折……把Ubuntu恢复到最开始,决定从头重新装。

这次我就直接先在eigen官网下载了3.2.0版的,装在了/home/lib_slam文件下,解压.

(好像解压完就完事了,由于我不知道要不要cmake,就尝试了一下,在解压后的eigen3文件下

mkdir build

cd build

cmake ..

make

sudo make install)

然后在usr/local/include文件下多了一个名为eigen3的文件夹。

通常代码里都写#include,这是默认在usr/include文件下找Eigen/Core,但是我的是在usr/local/include/eigen3文件夹下,网上说是可以把Eigen文件复制到默认目录下,应该复制过去之后多了一个Eigen的文件夹,但是我复制过去不是这样,所以也就是没成功,这样我就不能直接在默认目录下找了,只能是在CmakeLists.txt文件下添加绝对路径,如下:

# 添加Eigen头文件

include_directories( "/usr/local/include/eigen3" )

这样就成功了!噢 耶~好开心

安装Sophus

还是下载的压缩包,放在了/home/lib_slam/下,解压,编译(cmake),这个时候发现报错了 ,大概说是“在usr/local/include/eigen3”下找到的eigen是3.2.0版,但最低要求是3.3.0版。

go on…

我又用sudo apt-get install libeigen3-dev下载了eigen,没想到这个居然是3.2.92版,要疯了。。此时,在usr/include/下多了eigen3,这个就是刚下载的3.2.92版的,我也不会删,算了,就放那吧。。。

go on…

去eigen官网下载了3.3.5版,压缩包还是放在了放在了/home/lib_slam/下

sudo tar -xzvf eigen-eigen-5a0156e40feb.tar.gz -C /usr/local/include:这次我直接把解压后的文件夹放在/usr/local/include下,这条指令将eigen-eigen-5a0156e40feb.tar.g文件解压到了/usr/local/include目录下,在/usr/local/include目录下得到文件eigen-eigen-5a0156e40feb

sudo mv /usr/local/include/eigen-eigen-5a0156e40feb /usr/local/include/eigen335

这条指令将eigen-eigen-5a0156e40feb文件 更名为eigen335

返回重新编译Sophus,发现还是同样的错误,最终在一个博客里找到可以修改/home/lib_slam/Sophus/cmake_modules/FindEigen3.cmake的查找路径,于是开始了瞎改路程…

这是原始的截图,我尝试在红色字PATHS下,各种加路径,比如/usr/local/include/eigen335,发现根本没什么用,继续瞎改:

最后一行的eigen3改成了eigen335,这样就成功了!!!

哇~好开心!

这次编译Sophus就成功了,安装完成后,执行十四讲里的代码,cmake完成后,make失败,在CMakeLists.txt下加了一句message(STATUS "Include_directories: " ${Sophus_INCLUDE_DIRS}),这句话主要是看查找路径正不正确,因为cmake是成功的,所以加这句话其实也没啥用。加上之后再cmake,结果如下:

多了红色部分,这的确是正确的sophus查找路径。

make后的错误信息:

复制了红色部分到百度,有人说是在CMakeLists.txt文件下加上SET( CMAKE_CXX_FLAGS "-std=c++11 -O3"),重新编译了一下,咦?竟然真的成功了!!

同时我还修改了代码里的头文件,把so3.h改成了so3.hpp,因为我见头文件里是写的.hpp,也不知道有没有影响。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39616056/article/details/111718647

智能推荐

Promise.all中对于reject的处理方法_weixin_34413802的博客-程序员宅基地

2019独角兽企业重金招聘Python工程师标准>>> ...

剑指offer 数组中只出现一次的数字 python_God_white的博客-程序员宅基地

题目描述一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。样例返回[a,b]想法一:通常想法,使用HashMap,两边遍历。class Solution: # 返回[a,b] 其中ab是出现一次的两个数字 def FindNumsAppearOnce(self, array): # write code h...

华为交换机多vlan中继实验(三台交换机互联)_qwe843033514的博客-程序员宅基地_三台交换机互通

实验图:W1配置代码:<Huawei>system-view [Huawei]interface GigabitEthernet 0/0/1[Huawei-GigabitEthernet0/0/2]port link-type access [Huawei-GigabitEthernet0/0/2]port default vlan 10[Huawei-GigabitEthernet0/0/2]quit[Huawei]interface GigabitEthernet 0/0/3

C语言-信息管理系统(大作业)_ZTT-Erolii的博客-程序员宅基地_c语言大作业管理系统

新冠疫情病人信息管理系统,用到了结构体和链表实现了增删改查。#include<stdio.h>#include<stdlib.h> #include<string.h>#define KESOU 2//咳嗽的权重#define FARE 3//发热的权重#define GANMAO 1//感冒的权重//时间点结构体typedef struct datepoint{ int year; int month; int day; }datepoin

中山大学软件工程-Unity牧师与魔鬼(动作分离版)作业_我真的是吴彦祖啊的博客-程序员宅基地

一、 项目配置 首先创建一个新项目,选择3D模板 新项目的文件结构如下: 相较于上一次作业,少了Moveable脚本,多了Judge和Action两个文件 Assets/Resources下存放的是项目动态加载所需的图片以及预制,预制包括按要求制作成预制的牧师、魔鬼、船、河流和河岸,图片则是用于GUI装饰 Assets/Materials Assets/Scripts中则存放的是项目代码,各个类之间遵守MVC架构..

Spring Boot 中的Tomcat启动多次_wqztmx4的博客-程序员宅基地

org.apache.catalina.LifecycleException: Failed to start component [Connector[HTTP/1.1-8980]]    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)    at org.apache.catalina.core...

随便推点

多表查询、子查询、聚合函数_何须执手问年华丶的博客-程序员宅基地

一、多表查询使用单个select 语句从多个表格中取出相关的查询结果,多表连接通常是建立在有相互关系的父子表上;notice:下列代码参照上条博客用户和身份证关联(一对一)1、交叉连接第一个表中的所有行乘以第二个表中的所有行,也就是笛卡尔积-- 自然连接 -- 隐式语法select * from card,users;-- 显式语法select * from card c...

appium-Desktop android 查找不到Platform version_次次次呲牙的博客-程序员宅基地_appium platformversion

appium inspector正常启动,当运用pycharm执行脚本后,与此同时没有断开appium server,执行脚本时报错,找不到platform version,开启 appium inspector也是同样错误解决办法:删掉手机上appium安装的软件,重启手机  ...

Mybatis 基于代理实现的过程分析_南淮北安的博客-程序员宅基地

(1)可以看出所有的操作都是基于SqlSession 对象(2)顺势找到接口SqlSession 的实现类 DefaultSqlSession,找到其中的 getMapper 方法(3)继续进入configuration的getMapper 方法(4)进入MapperRegistry 的 getMapper 方法(5)继续跳转进入,到这一步就可以看出来动态代理的影子了,接下来重点看...

Python连接SQL Server数据库 增删改查_漂泊_人生的博客-程序员宅基地

2018年05月30日 17:46:01gx_up阅读数:2328版权声明:听说这里是写版权的,那转载就请注明下吧 https://blog.csdn.net/qq_32688731/article/details/80513453Pymssql使用麻烦的是,经常安装失败。需要先下载包,再在本地进行安装。pip install pymssql传送门:https:...

经典面试题-Spring框架中的单例Beans是线程安全的么?_cwl_java的博客-程序员宅基地

Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定。 但实际上,大部分的Spring bean并没有可变的状态(比如Service类和DAO类),所以在某种程度上说Spring的单例bean是线程安全的。如果你的bean有多种状态的话(比如 View Model 对象),就需要自行保证线程安全。最浅显的解决办法就是将多态bean...

Mybatis中一对一映射详解_suwu150的博客-程序员宅基地

Mybatis中一对一映射Student和Address是一个【一对一】关系,我们进行对这类关系的操作对于地址信息,我们能够通过分析可知,有编号,街道,城市国家等,而对于教师信息,当MyBatis将一个Java对象作为输入参数执行INSERT语句操作时,它会创建一个PreparedStatement对象,并且使用setXXX()方法对?号占位符 设置相应的参数值 。这里,XXX可以是int,String,Date 等 Java对象属性类型的任意一个。这里,参数对象的属性phone是 PhoneNumber类

推荐文章

热门文章

相关标签