SLAM14讲,Sophus使用,Find_Package()无法定位

ch4的示例代码,拿出来测试,总是出现如下错误:

SLAM/demo/ch4/src/useSophus.cpp:5:10: fatal error: sophus/se3.hpp: 没有那个文件或目录
 #include "sophus/se3.hpp"
          ^~~~~~~~~~~~~~~~

这时CMakeLists.txt中是这样的:

#需要使用find_package命令找到它
find_package(Sophus REQUIRED)
include_directories(${Sophus_INCLUDE_DIRS})

我想显示${Sophus_INCLUDE_DIRS},于是加了一句:MESSAGE()如下所示:

#需要使用find_package命令找到它
find_package(Sophus REQUIRED)
include_directories(${Sophus_INCLUDE_DIRS})

message(STATUS "Include_directories: " ${Sophus_INCLUDE_DIRS})

之后Cmake结果是:

xj@xj-MRC-WX0:~/SLAM/demo/ch4/build$ cmake ..
-- Include_directories: 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/xj/SLAM/demo/ch4/build

可见,根本就没有正确的include路径,于是只能指定绝对路径了,完整的CMakeLists.txt为:

#需要使用find_package命令找到它
#find_package(Sophus REQUIRED)
#include_directories(${Sophus_INCLUDE_DIRS})
include_directories("/home/xj/SLAM/3rdparty/Sophus/sophus")
message(STATUS "Include_directories: " ${Sophus_INCLUDE_DIRS})

# Eigen
include_directories("/usr/include/eigen3")
add_executable(useSophus useSophus.cpp)

注意,因为指定到了..Sophus/sophus,所以源码中的useSophus.cpp也要改一下:

#include "sophus/se3.hpp"

改成 :

#include "se3.hpp"

结果就没有问题了:

xj@xj-MRC-WX0:~/SLAM/demo/ch4/build$ make
Scanning dependencies of target useSophus
[ 50%] Building CXX object src/CMakeFiles/useSophus.dir/useSophus.cpp.o
[100%] Linking CXX executable useSophus
[100%] Built target useSophus

总结一下:之前以为是Sophus没有编译(build)好,各种试,原来只是Include没有find,为什么?先不深究了,赶进度测试学习。

 

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用ROS时,当编译别人的功能包时,可能会遇到缺少功能包的问题。具体错误提示为"Could not find a package configuration file provided by 'slam_karto' with any of the following names: slam_kartoConfig.cmake slam_karto-config.cmake"。解决这个问题的方法是使用以下命令安装缺少的功能包: ``` sudo apt install ros-[你的ROS版本]-slam-karto ``` 其中,[你的ROS版本]是你正在使用的ROS版本,slam-karto是你缺少的功能包名称。将这两个信息替换到命令中,然后执行即可解决问题。这个命令的通用格式是"sudo apt install ros-[你的ROS版本]-[功能包名称]"。 另外,在解决这个问题时,还有一个可能的解决方法是将"slam_karto"的安装路径添加到CMAKE_PREFIX_PATH中,或者设置"slam_karto_DIR"为包含上述文件之一的目录。如果"slam_karto"提供了单独的开发包或SDK,请确保已经安装了它。根据调用堆栈信息,可以找到CMakeLists.txt文件中的第3行使用了find_package函数来查找功能包。但需要注意的是,这个方法可能不适用于所有情况,具体还需要根据实际情况来判断。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Could not find a package configuration file provided by “slam_karto” with any of the following ...](https://blog.csdn.net/maizousidemao/article/details/88896851)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值