ubuntu下安装Sophus库出现问题及解决办法_git checkout a621ff error-程序员宅基地

技术标签: 系统运维  

Sophus库是一个较好的李群李代数库,此处安装的是非模板类的Sophus库。具体安装过程如下:
1、安装指令:
git clone https://github.com/strasdat/Sophus.git
cd Sophus/
git checkout a621ff

mkdir build
cd build
cmake ..
make
2、编译过程中出现的问题及解决办法:

问题1:

/Sophus/sophus/so2.cpp:32:26: error: lvalue required as left operand of assignment
unit_complex_.real() = 1.;

/Sophus/sophus/so2.cpp:33:26: error: lvalue required as left operand of assignment
unit_complex_.imag() = 0.;

该错误可以定位到so2.cpp源码文件下:

SO2::SO2()
{
  unit_complex_.real() = 1.;
  unit_complex_.imag() = 0.;
}

修改为

SO2::SO2()
{
  //unit_complex_.real() = 1.;
  //unit_complex_.imag() = 0.;
  unit_complex_.real(1.);
  unit_complex_.imag(0.);
}

问题2:
/home/tympn/workspace/slam/practice/Sophus/sophus/so2.cpp:83:67: required from here
/usr/include/eigen3/Eigen/src/Core/AssignEvaluator.h:86:63: ***error: enum constant in boolean context [-Werror=int-in-bool-context]
MayLinearVectorize = bool(MightVectorize) && MayLinearize && DstHasDirectAccess***

这类错误有很多,就不一一列举,只贴其中一条

该错误可以定位到eigen库下的AssignEvaluator.h文件,为了修复gcc7的警告问题,对该文件已做了如下修改:

enum {
     DstAlignment = DstEvaluator::Alignment,
     SrcAlignment = SrcEvaluator::Alignment,
-    DstHasDirectAccess = DstFlags & DirectAccessBit,
+    DstHasDirectAccess = (DstFlags & DirectAccessBit) == DirectAccessBit,
     JointAlignment = EIGEN_PLAIN_ENUM_MIN(DstAlignment,SrcAlignment)
   };

                    && int(OuterStride)!=Dynamic && int(OuterStride)%int(InnerPacketSize)==0
                        && (EIGEN_UNALIGNED_VECTORIZE  || int(JointAlignment)>=int(InnerRequiredAlignment)),
     MayLinearize = bool(StorageOrdersAgree) && (int(DstFlags) & int(SrcFlags) & LinearAccessBit),
-    MayLinearVectorize = bool(MightVectorize) && MayLinearize && DstHasDirectAccess
+    MayLinearVectorize = bool(MightVectorize) && bool(MayLinearize) && bool(DstHasDirectAccess)
                        && (EIGEN_UNALIGNED_VECTORIZE || (int(DstAlignment)>=int(LinearRequiredAlignment)) || MaxSizeAtCompileTime == Dynamic),
       /* If the destination isn't aligned, we have to do runtime checks and we don't unroll,
          so it's only good for large enough sizes. */

其中加号行代码替换减号行
参考源:https://bitbucket.org/eigen/eigen/commits/b4f969795d1b0adbb43ebdd8c6bbcb42cb559687?at=3.3

3.使用过程中出现的问题
该库的使用可以安装也可以不安装,这里建议安装,因为只有安装后在阅读源码时才可以跳转到该库的头文件。
不论安不安装,均可以使用下列方式编译调用该库

cmake_minimum_required( VERSION 2.8 )
project( useSophus )
set(CMAKE_BUILD_TYPE "Release")
# 为使用 sophus,您需要使用find_package命令找到它
find_package( Sophus REQUIRED )
include_directories( ${Sophus_INCLUDE_DIRS} )
add_executable( useSophus useSophus.cpp )
target_link_libraries( useSophus ${Sophus_LIBRARIES})

这里有个坑需要注意:

set(CMAKE_BUILD_TYPE "Release")

这条语句不能少,少了后,代码可以正常编译生成可执行文件,但是在运行可执行文件时会出现如下错误:

useSophus: /usr/include/eigen3/Eigen/src/Core/PlainObjectBase.h:285: void Eigen::PlainObjectBase<Derived>::resize(Eigen::Index, Eigen::Index) [with Derived = Eigen::
Matrix<double, 3, 1>; Eigen::Index = long int]: Assertion `(!(RowsAtCompileTime!=Dynamic) || (rows==RowsAtCompileTime)) && (!(ColsAtCompileTime!=Dynamic) || (cols==C
olsAtCompileTime)) && (!(RowsAtCompileTime==Dynamic && MaxRowsAtCompileTime!=Dynamic) || (rows<=MaxRowsAtCompileTime)) && (!(ColsAtCompileTime==Dynamic && MaxColsAtC
ompileTime!=Dynamic) || (cols<=MaxColsAtCompileTime)) && rows>=0 && cols>=0 && "Invalid sizes when resizing a matrix or array."' failed.
Aborted (core dumped)

这是因为该库不支持Debug模式
注意:如果不使用CMAKE_BUILD_TYPE参数,则默认是Debug

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

智能推荐

序( 2018年4-6月,进行geographiclib1。42)_geographiclib c#-程序员宅基地

文章浏览阅读975次。由于本公司代码使用SDK方式开发,看不到源码,只好学习开源项目了。要不将来就成为码农了。从sourceforge看到,GIS排名前三的有个geographiclib,属于GIS类库,这样正好系统地学习下。最低版本是1.42,所有代码统计(包括例子)文件数总行数代码行数空行行数注释行数注释百分比代码百分比275644403485_geographiclib c#

c++for循环实现九九乘法表_c++使用for循环编写程序,输出九九乘法表-程序员宅基地

文章浏览阅读3.7k次。#include<iostream>using namespace std;void main(){ //打印九九乘法表 for(int i=1;i<=9;i++)//打印行 { for(int j=1;j<=i;j++) { cout<<i<<"*"<<j<<"="<<i*j<<" "; } cout<<endl; } system(..._c++使用for循环编写程序,输出九九乘法表

2021-6-22:开发小而美的博客(设计与规范和实体类构建)_小而美的博客数据库设计-程序员宅基地

文章浏览阅读143次。2021-6-22:开发小而美的博客(设计与规范)文章目录2021-6-22:开发小而美的博客(设计与规范)实体类博客 Blog博客分类Type博客标签Tag博客评论Comment用户User_小而美的博客数据库设计

什么是跨站脚本 (XSS) 攻击?_跨站脚本攻击-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏9次。这一次,教会xss攻击!!!!!!!_跨站脚本攻击

神经网络中的单层神经网络-程序员宅基地

文章浏览阅读1.6w次,点赞30次,收藏94次。文章目录一、神经网络1.概述1.1 结构1.2 神经元模型使用2. 单层神经网络2.1 感知器2.2 数学描述2.3 感知器分类效果2.4 单层神经网络表示2.5 单层神经网络训练算法2.6 单层神经网络中的计算公式表示文章综合一下几位大佬的文章:杨强AT南京: DL01-6: 单层神经网络企鹅号 - 轨道车辆: 技术篇:单层神经网络是什么,看完这篇文章你就懂了一、神经网络1.概述..._单层神经网络

flask中的url_for-程序员宅基地

文章浏览阅读193次。转自:https://blog.csdn.net/dengfan666/article/details/783201881.URL反转:根据视图函数名称得到当前所指向的url2.url_for() 函数最简单的用法是以视图函数名作为参数,返回对应的url,还可以用作加载静态文件,如[python] view plain copy<linkrel="st..._flask url_for

随便推点

花生壳5.0 for Linux使用教程_phddns5-程序员宅基地

文章浏览阅读3.7k次。注意:(1)当前5.0版本不支持使用内置帐号、不兼容3.0版本、不可直接从3.0升级到5.0,需卸载3.0后才可安装5.0,请3.0版本的用户按需升级。(2)在安装Linux 5.0前确认系统已安装好wget依赖包。CentOS:yum -y install wgetUbuntu:apt-get update (更新软件列表)、apt-get install wget (下载wget工具)、wget --version (查看下载安装成功wget版本)一、下载进入花生壳站点下载Linux _phddns5

孩子兄弟表示法家谱_孩子兄弟表示法族谱-程序员宅基地

文章浏览阅读2.5k次。#include #include #include #include const int MAXSIZE = 5000;const int NAME_LENGTH = 500;using namespace std;struct TreeNode{ char name[NAME_LENGTH];//定义一个字符数组,存放姓名 int level;//辈分_孩子兄弟表示法族谱

使用 RSA 算法进行加解密,签名和验签_rsa签名 online-程序员宅基地

文章浏览阅读995次。文章目录使用 RSA 算法进行加解密,签名和验签1、简介2、引入依赖3、生成公私钥对4、进行签名和验签5、进行加密和解密6、运行一下7、完整代码使用 RSA 算法进行加解密,签名和验签1、简介RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的是一种非对称加密算法2、引入依赖 <depe_rsa签名 online

vue2.0中引入UEditor的一些坑。。。。-程序员宅基地

文章浏览阅读379次。开发后台系统的时候,富文本编辑器肯定是必不可少的,然后呢~在天朝当然要属百度编辑器(UEditor)最成熟了,功能全面,文档齐全(相对),ui优美(。。。,对于程序员来说)等等许多方面(MMP,还不是因为有中文文档和国人使用经验参考),所以使用百度编辑器就是不二之选了,早前再angular1的项目中使用过UE,主要是由后端配置好用,直接扔一个demo给我们,照着插入就OK了,现在呢,只能自己封装..._vue2 ueditor层级

测试Bugzilla中严重成度详细说明-程序员宅基地

文章浏览阅读700次。BUG严重级别解释规范目的:测试工程师在提交Bug时,为选择Bug的严重级别的依据。测试工程师在提交Bug时,需要选择该Bug的严重程度,不同的选项代表不同的严重程度,解释如下:Ø Blocker该Bug不仅造成本产品/项目异常,并且导致其他服务器、数据库、中间件、程序、操作系统等不能提供正常服务(包括客户端)。 Ø Critical该Bug影响两个..._bugzilla显示等级

tensorflow教程学习三TensorFlow运作方式入门-程序员宅基地

文章浏览阅读863次。讲解链接:http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_tf.html"""Trains and Evaluates the MNIST network using a feed dictionary."""from __future__ import absolute_importfrom __future__tensorflow运作方式