G2O库和Eigen库can not find 问题——FindG2O.cmake FindEigen3.cmake

2023-05-16

目录

  • CMakeLists设置
  • FindG2O.cmake文件内容
  • FindEigen3.cmake 文件内容

CMakeLists设置

在CMakeLists里加入如下这句话,并在项目文件夹中新建cmake文件夹。

LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)

FindG2O.cmake文件内容

cmake文件夹中,新建FindG2O.cmake文件和 FindEigen3.cmake文件
FindG2O.cmake文件包含以下内容

# Find the header files

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

# Macro to unify finding both the debug and release versions of the
# libraries; this is adapted from the OpenSceneGraph FIND_LIBRARY
# macro.

MACRO(FIND_G2O_LIBRARY MYLIBRARY MYLIBRARYNAME)

  FIND_LIBRARY("${MYLIBRARY}_DEBUG"
    NAMES "g2o_${MYLIBRARYNAME}_d"
    PATHS
    ${G2O_ROOT}/lib/Debug
    ${G2O_ROOT}/lib
    $ENV{G2O_ROOT}/lib/Debug
    $ENV{G2O_ROOT}/lib
    NO_DEFAULT_PATH
    )

  FIND_LIBRARY("${MYLIBRARY}_DEBUG"
    NAMES "g2o_${MYLIBRARYNAME}_d"
    PATHS
    ~/Library/Frameworks
    /Library/Frameworks
    /usr/local/lib
    /usr/local/lib64
    /usr/lib
    /usr/lib64
    /opt/local/lib
    /sw/local/lib
    /sw/lib
    )
  
  FIND_LIBRARY(${MYLIBRARY}
    NAMES "g2o_${MYLIBRARYNAME}"
    PATHS
    ${G2O_ROOT}/lib/Release
    ${G2O_ROOT}/lib
    $ENV{G2O_ROOT}/lib/Release
    $ENV{G2O_ROOT}/lib
    NO_DEFAULT_PATH
    )

  FIND_LIBRARY(${MYLIBRARY}
    NAMES "g2o_${MYLIBRARYNAME}"
    PATHS
    ~/Library/Frameworks
    /Library/Frameworks
    /usr/local/lib
    /usr/local/lib64
    /usr/lib
    /usr/lib64
    /opt/local/lib
    /sw/local/lib
    /sw/lib
    )
  
  IF(NOT ${MYLIBRARY}_DEBUG)
    IF(MYLIBRARY)
      SET(${MYLIBRARY}_DEBUG ${MYLIBRARY})
    ENDIF(MYLIBRARY)
  ENDIF( NOT ${MYLIBRARY}_DEBUG)
  
ENDMACRO(FIND_G2O_LIBRARY LIBRARY LIBRARYNAME)

# Find the core elements
FIND_G2O_LIBRARY(G2O_STUFF_LIBRARY stuff)
FIND_G2O_LIBRARY(G2O_CORE_LIBRARY core)

# Find the CLI library
FIND_G2O_LIBRARY(G2O_CLI_LIBRARY cli)

# Find the pluggable solvers
FIND_G2O_LIBRARY(G2O_SOLVER_CHOLMOD solver_cholmod)
FIND_G2O_LIBRARY(G2O_SOLVER_CSPARSE solver_csparse)
FIND_G2O_LIBRARY(G2O_SOLVER_CSPARSE_EXTENSION csparse_extension)
FIND_G2O_LIBRARY(G2O_SOLVER_DENSE solver_dense)
FIND_G2O_LIBRARY(G2O_SOLVER_PCG solver_pcg)
FIND_G2O_LIBRARY(G2O_SOLVER_SLAM2D_LINEAR solver_slam2d_linear)
FIND_G2O_LIBRARY(G2O_SOLVER_STRUCTURE_ONLY solver_structure_only)
FIND_G2O_LIBRARY(G2O_SOLVER_EIGEN solver_eigen)

# Find the predefined types
FIND_G2O_LIBRARY(G2O_TYPES_DATA types_data)
FIND_G2O_LIBRARY(G2O_TYPES_ICP types_icp)
FIND_G2O_LIBRARY(G2O_TYPES_SBA types_sba)
FIND_G2O_LIBRARY(G2O_TYPES_SCLAM2D types_sclam2d)
FIND_G2O_LIBRARY(G2O_TYPES_SIM3 types_sim3)
FIND_G2O_LIBRARY(G2O_TYPES_SLAM2D types_slam2d)
FIND_G2O_LIBRARY(G2O_TYPES_SLAM3D types_slam3d)

# G2O solvers declared found if we found at least one solver
SET(G2O_SOLVERS_FOUND "NO")
IF(G2O_SOLVER_CHOLMOD OR G2O_SOLVER_CSPARSE OR G2O_SOLVER_DENSE OR G2O_SOLVER_PCG OR G2O_SOLVER_SLAM2D_LINEAR OR G2O_SOLVER_STRUCTURE_ONLY OR G2O_SOLVER_EIGEN)
  SET(G2O_SOLVERS_FOUND "YES")
ENDIF(G2O_SOLVER_CHOLMOD OR G2O_SOLVER_CSPARSE OR G2O_SOLVER_DENSE OR G2O_SOLVER_PCG OR G2O_SOLVER_SLAM2D_LINEAR OR G2O_SOLVER_STRUCTURE_ONLY OR G2O_SOLVER_EIGEN)

# G2O itself declared found if we found the core libraries and at least one solver
SET(G2O_FOUND "NO")
IF(G2O_STUFF_LIBRARY AND G2O_CORE_LIBRARY AND G2O_INCLUDE_DIR AND G2O_SOLVERS_FOUND)
  SET(G2O_FOUND "YES")
ENDIF(G2O_STUFF_LIBRARY AND G2O_CORE_LIBRARY AND G2O_INCLUDE_DIR AND G2O_SOLVERS_FOUND)

FindEigen3.cmake 文件内容

FindEigen3.cmake 文件夹中包含以下内容

# - Try to find Eigen3 lib
#
# This module supports requiring a minimum version, e.g. you can do
#   find_package(Eigen3 3.1.2)
# to require version 3.1.2 or newer of Eigen3.
#
# Once done this will define
#
#  EIGEN3_FOUND - system has eigen lib with correct version
#  EIGEN3_INCLUDE_DIR - the eigen include directory
#  EIGEN3_VERSION - eigen version

# Copyright (c) 2006, 2007 Montel Laurent, <montel@kde.org>
# Copyright (c) 2008, 2009 Gael Guennebaud, <g.gael@free.fr>
# Copyright (c) 2009 Benoit Jacob <jacob.benoit.1@gmail.com>
# Redistribution and use is allowed according to the terms of the 2-clause BSD license.

if(NOT Eigen3_FIND_VERSION)
  if(NOT Eigen3_FIND_VERSION_MAJOR)
    set(Eigen3_FIND_VERSION_MAJOR 2)
  endif(NOT Eigen3_FIND_VERSION_MAJOR)
  if(NOT Eigen3_FIND_VERSION_MINOR)
    set(Eigen3_FIND_VERSION_MINOR 91)
  endif(NOT Eigen3_FIND_VERSION_MINOR)
  if(NOT Eigen3_FIND_VERSION_PATCH)
    set(Eigen3_FIND_VERSION_PATCH 0)
  endif(NOT Eigen3_FIND_VERSION_PATCH)

  set(Eigen3_FIND_VERSION "${Eigen3_FIND_VERSION_MAJOR}.${Eigen3_FIND_VERSION_MINOR}.${Eigen3_FIND_VERSION_PATCH}")
endif(NOT Eigen3_FIND_VERSION)

macro(_eigen3_check_version)
  file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen3_version_header)

  string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen3_world_version_match "${_eigen3_version_header}")
  set(EIGEN3_WORLD_VERSION "${CMAKE_MATCH_1}")
  string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen3_major_version_match "${_eigen3_version_header}")
  set(EIGEN3_MAJOR_VERSION "${CMAKE_MATCH_1}")
  string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen3_minor_version_match "${_eigen3_version_header}")
  set(EIGEN3_MINOR_VERSION "${CMAKE_MATCH_1}")

  set(EIGEN3_VERSION ${EIGEN3_WORLD_VERSION}.${EIGEN3_MAJOR_VERSION}.${EIGEN3_MINOR_VERSION})
  if(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
    set(EIGEN3_VERSION_OK FALSE)
  else(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
    set(EIGEN3_VERSION_OK TRUE)
  endif(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})

  if(NOT EIGEN3_VERSION_OK)

    message(STATUS "Eigen3 version ${EIGEN3_VERSION} found in ${EIGEN3_INCLUDE_DIR}, "
                   "but at least version ${Eigen3_FIND_VERSION} is required")
  endif(NOT EIGEN3_VERSION_OK)
endmacro(_eigen3_check_version)

if (EIGEN3_INCLUDE_DIR)

  # in cache already
  _eigen3_check_version()
  set(EIGEN3_FOUND ${EIGEN3_VERSION_OK})

else (EIGEN3_INCLUDE_DIR)

  # specific additional paths for some OS
  if (WIN32)
    set(EIGEN_ADDITIONAL_SEARCH_PATHS ${EIGEN_ADDITIONAL_SEARCH_PATHS} "C:/Program Files/Eigen/include" "C:/Program Files (x86)/Eigen/include")
  endif(WIN32)

  find_path(EIGEN3_INCLUDE_DIR NAMES signature_of_eigen3_matrix_library
      PATHS
      ${CMAKE_INSTALL_PREFIX}/include
      ${EIGEN_ADDITIONAL_SEARCH_PATHS}
      ${KDE4_INCLUDE_DIR}
      PATH_SUFFIXES eigen3 eigen
    )

  if(EIGEN3_INCLUDE_DIR)
    _eigen3_check_version()
  endif(EIGEN3_INCLUDE_DIR)

  include(FindPackageHandleStandardArgs)
  find_package_handle_standard_args(Eigen3 DEFAULT_MSG EIGEN3_INCLUDE_DIR EIGEN3_VERSION_OK)

  mark_as_advanced(EIGEN3_INCLUDE_DIR)

endif(EIGEN3_INCLUDE_DIR)


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

G2O库和Eigen库can not find 问题——FindG2O.cmake FindEigen3.cmake 的相关文章

  • 从特征序列化分解矩阵(SparseLU 对象)

    我正在尝试解决Ax b其中矩阵 A 可以大到接近1M x 1M在大小上 是稀疏且对称的 但可能没有明确定义 问题是使用以下方法计算分解可能需要很长时间稀疏LU对象 http eigen tuxfamily org dox devel cla
  • Visual Studio 使用查找/替换和结束行正则表达式 ($) 将文本附加到行尾

    我尝试使用 Visual Studio 或 SQL Server Management Studio 在查找 替换对话框中使用以下设置将一些文本 例如 Fish 附加到文件中每一行的末尾 查找内容 替换为 鱼 使用正则表达式 选中 这主要完
  • 如何在 Subversion 服务器中搜索文件?

    有没有办法在颠覆存储库中搜索文件 类似于 Unix 的东西find命令 用它我可以找到存储库中文件的位置 我知道有svn list 但这给了我一个目录中所有文件的列表 我想找到文件所在的目录 您可以在服务器上使用以下命令和 grep svn
  • Eigen SparseMatrix 的零拷贝构造

    我有以下问题 我有一个Eigen SparseMatrix我需要通过网络发送 而我的网络库仅支持发送原始类型的数组 我可以通过执行类似的操作来检索指向 SparseMatrix 的支持数组的指针 这是支持对象的代码 https eigen
  • 匹配一行中的第 n 个单词

    在我使用的应用程序中 我无法选择比赛组 1 我可以使用的结果是正则表达式的完整匹配 但我需要第 5 个单词 jumps 作为匹配结果 而不是完整的匹配项 The Quick Brown Fox Jumps 4 The quick brown
  • 更有效地查找和压缩数百万个文件

    我的服务器上有一个作业在命令行提示符下运行了两天 find data name filepattern 2009 exec tar uf 2009 tar 它正在采取forever 然后还有一些 是的 目标目录中有数百万个文件 在经过良好哈
  • 如何在 Eigen 中初始化 SparseVector

    如何在 Eigen 中初始化 SparseVector 下面的代码 define EIGEN YES I KNOW SPARSE MODULE IS NOT STABLE YET include
  • 正则表达式类型之间的差异

    我正在读 GNU find的手册页并偶然发现了这个开关 regextype type Changes the regular expression syntax understood by regex and iregex tests wh
  • 查找但不深入到包含搜索文件的目录

    我有几个由 pom xml 或类似配置的项目 我想使用 linux file 命令来定位这些项目 例如经过find name pom xml 然而 由于路径很深 这需要一些时间 我想用find prune当我已经找到文件时停止在子目录中搜索
  • 如何确保特征等距保持等距?

    我目前正在调查Eigen Isometry3f 定义为typedef Transform
  • 理解 find 中转义的括号

    我已经拼凑了下面的内容 它似乎可以工作 但 空 可能是个例外 我正在学习的一件事 随着我的学习 是 仅仅因为某些东西有效 并不意味着它是正确的或正确形成的 我的问题是如何确定查找中哪些需要括号 哪些不需要命令 在 OS X 中 and 是
  • find 命令仅搜索非隐藏目录

    在以下命令中 我只想搜索非隐藏的目录 如何使用以下命令执行此操作 我想在搜索日志文件时忽略隐藏目录 find home tom project name log txt ls home tom project dir1 dir2 backu
  • 如何桥接 JavaScript(参差不齐)数组和 std::vector> 对象?

    在 JavaScript 中 我有一个 线 列表 每条线都由不定数量的 点 组成 每个点都有以下形式 x y 所以它是一个 3D 参差不齐的数组 现在我需要在 emscripten 的帮助下将它传递给我的 C 代码 embind https
  • Google App 脚本在电子表格中查找文本并返回位置索引

    我是谷歌应用程序脚本的新手 我的 JavaScript 也不是很强 但这似乎都不是问题 因为我的代码在第一次运行时可以工作 但当我尝试再次调用它时 它会失败 简而言之 我试图拥有一个可以动态查找给定范围内给定文本的函数 虽然看起来可能有一个
  • 为什么我在mongodb中找不到_id的记录

    我试图通过 MongoID id 字段在 mongoDB 中查找记录 我找到了有关如何执行此操作的示例 但无法使其发挥作用 例子 recID 010101010101011 would be a valid mongodb id recID
  • Mongo:如何通过存储在子数组中的ObjectId查找?

    我有一个包含这样记录的集合 id ObjectId 50ae3bdb50b3d6f01400027a admins ObjectId 50ae3bdb50b3d6f014000279 ObjectId 50ae3bdb50b3d6f0140
  • 浏览器Ctrl+F查找不可见文本

    Can the browser feature of Ctrl F to find text be integrated with text in popup windows I d like to have some scientific
  • 检测“位图中”的形状

    所以 在为下一场 ieextreme 比赛做准备时 我遇到了一些过去的问题 我发现一个真正困扰我的问题 因为我不知道该怎么做 我可能可以使用一些 300 行的暴力代码来实现它 但我我认为这不是在这样的比赛中应该做的事情 所以我需要你的帮助
  • 如何搜索包含2个特定字符串的所有文件?

    在我的 Visual Studio 中 我想找到包含 2 个特定单词的所有文件 例如 UpdatePanel and DropDownCheckList在解决方案或项目中 换句话说 我喜欢使用我自制的网络服务器控件来查找所有文件DropDo
  • Eigen 如何沿特定维度连接矩阵?

    我有两个特征矩阵 我想将它们连接起来 就像在 matlab 中一样cat 0 A B eigen 有等价物吗 Thanks 您可以使用逗号初始值设定项语法 水平方向 MatrixXd C A rows A cols B cols C lt

随机推荐

  • QApplication a(argc,argv);崩溃

    Microsoft Visual C 43 43 Debug Library Debug Error Program de mytoolkit mytoolkit mytoolkit Win32 Debug mytoolkit exe Mo
  • jetson Xavier nx安装torch和torchvision,并解决解决版本不匹配(报错RuntimeError: Couldn‘t load custom C++ ops)的问题

    目录 1 安装torch 2 安装torchvision 3 验证是否安装成功 4 错误记录 5 torch和torchvision网盘链接 首先 xff0c torch和torchvision都不能直接pip安装 xff0c 以下的演示是
  • C++ 数据结构:DS顺序表--合并操作

    题目描述 建立顺序表的类 xff0c 属性包括 xff1a 数组 实际长度 最大长度 xff08 设定为1000 xff09 已知两个递增序列 xff0c 把两个序列的数据合并到顺序表中 xff0c 并使得顺序表的数据递增有序 输入 第1行
  • ubuntu安装多个版本python

    背景 xff1a 本地环境 Ubuntu 22 04 64 bit xff0c 默认安装python3 10 6 xff0c 未安装pip venv 需求 xff1a 安装python3 8 xff0c 并安装两版本对应pip xff0c
  • socket编程中recv()和read()的使用与区别

    recv和read相似 xff0c 都可用来接收sockfd发送的数据 xff0c 但recv比read多了一个参数 xff0c 也就是第四个参数 xff0c 它可以指定标志来控制如何接收数据 1 recv 原型 xff1a ssize t
  • stm32printf函数的串口输出代码

    stm32f103串口一与串口二printf函数输出 因项目需要特意配置了该段代码 xff0c 不喜勿喷 xff0c 纯属个人笔记 对于串口的代码网上也是很多 xff0c 无非是配置问题 xff0c 该代码是基于stm32f103c8t6来
  • C/C++ —— 小端转大端函数的使用

    函数说明 uint32 t htonl uint32 t hostlong uint16 t htons uint16 t hostshort uint32 t ntohl uint32 t netlong uint16 t ntohs u
  • AntDesign Upload组件上传图片

    技术选型 前端技术选型 xff1a React Hook 43 typescript antd版本 xff1a 3 18 使用Upload上传图片 上传效果截图 预览效果截图 项目中完整写法 xff1a span class token k
  • [LeetCode] 876. Middle of the Linked List

    Given a non empty singly linked list with head node head return a middle node of linked list If there are two middle nod
  • 博客搬家啦

    博客搬家啦 xff0c 新博客地址 https blueleek blue 小伙伴一起嗨学一起来
  • MFC 改变编辑框字体(大小,字体)

    1 在 Dlg h文件中加入 CFont font 字体对象 2 定义一个CEdit控件变量 CEdit m EditAa 61 CEdit GetDlgItem IDC A EDIT A 关联控件A CEdit m EditBb 61 C
  • STM32 中浮点转成字符串,解决 -u_printf_float

    开发偶遇问题 在C 43 43 或其他高级语言中 xff0c 以及C语言在Visual Studio或者linux平台上 xff0c 是可以直接通过sprintf将 xff0c int float转换成string类型的 xff1b 但是
  • 路由器原理(一)

    觉得之前对路由器的了解还不是特别清楚 xff0c 继续来学习 xff0c 是参考了路由器的原理及其配置 xff08 一 xff09 一 xff1a 路由器的基础知识 xff08 1 xff09 路由器的概述 xff1a 作为网络层的网络互连
  • 表单提交及后台数据接收

    用POST请求 xff0c 后台原生接收的一个公式 xff1a span class hljs transposed variable req span addListener span class hljs string 34 data
  • JSON怎样添加注释

    今天在写一个程序的时候发现了一个问题 xff0c 在json文件中添加注释之后 xff0c 程序就出现bug了 于是 xff0c 去搜了一下这个问题的相关解释 xff0c 在这里和大家分享一下 xff1a JSON为什么不能添加注释 xff
  • Converting circular structure to JSON

    在做手机验证码模块 xff0c 遇到一个bug Converting circular span class hljs keyword structure span span class hljs keyword to span JSON
  • Mac root和普通用户切换

    今日 xff0c 老身在用su 命令 xff0c 输入密码之后准备切换至root用户 但不幸得到这个消息 xff1a su Sorry 找到解决方案如下 xff1a span class hljs built in sudo span su
  • TCP UDP 的区别和具体应用场景

    TCP和UDP 两者都是通信协议 xff0c TCP和UDP都是传输层协议 xff0c 但是他们的通信机制和应用场景不同 TCP TCP xff08 Transmission Control Protocol xff09 又叫传输控制协议
  • 浏览器缓存机制详解(一)

    浏览器缓存机制可以极大的提升用户体验 xff0c 另一方面会因为读取缓存而展示了错误的东西 xff0c 因而在开发中要设法将其删除 什么是浏览器缓存 xff1f 浏览器缓存就是把一个已经请求过的web资源 xff08 如html页面 xff
  • G2O库和Eigen库can not find 问题——FindG2O.cmake FindEigen3.cmake

    目录 CMakeLists设置FindG2O cmake文件内容FindEigen3 cmake 文件内容 CMakeLists设置 在CMakeLists里加入如下这句话 xff0c 并在项目文件夹中新建cmake文件夹 LIST APP