【问题收集】slam中常见make问题错误 相关总结

本文总结了在SLAM映射和CMake使用中遇到的错误,包括OpenCV版本不匹配导致的错误和GCC版本过低的问题。针对OpenCV错误,建议使用3.4版本,并提供了相关解决方案链接。对于GCC版本问题,通过安装更新版本并设置系统默认值来解决。此外,还解决了因<filesystem>和<link libraries>导致的Segmentation fault,强调了正确设置C++标准和链接库的重要性。

前言

主要总结最近slam mapping编译 等cmake使用上遇到的错误和解决方案


欢迎在评论区共同提出 我及时总结到这里面去 都是些坑

0. opencv 相关

cv2.error: /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/highgui/src/window.cpp:304: error: (-215)

主要是老胡的opencv版本问题… emm 需要走3.4,但是默认是3.2,所以会冲突

完整方案:https://chowdera.com/2022/134/202205140601479701.html

https://blog.youkuaiyun.com/qinqinxiansheng/article/details/120219388

最好的方案是:https://www.icode9.com/content-3-1356655.html

随后发现可以走ExternalProject_Add 会更好,TODO添加

1. gcc相关

很多关于这个点的教程 动不动就rm -rf 其实把 有时候挺危险的,包括本人自己以前 也比较喜欢 rm -rf,但是还是慎用,有set 的方式就用set哈

版本过低 no such file

主要是编译vdbfusion example时遇到的问题

fatal error: charconv: No such file or directory  #include <charconv>

fatal error: filesystem: No such file or directory #include <filesystem>

然后搜到了一位韩国老哥的正解:https://jtrimind.github.io/troubleshooting/filesystem/ 升级gcc,如下

gcc --version # 检查版本
sudo apt install gcc-8 g++-8 # 安装8.0版本

# 设置系统默认值
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 700 --slave /usr/bin/g++ g++ /usr/bin/g++-7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 800 --slave /usr/bin/g++ g++ /usr/bin/g++-8

# 再次检查
gcc --version

然后配置CFLAGS为17即可解决,在CMakeLists.txt中加入:

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "--std=c++17 -lstdc++fs")

fatal error: execution: No such file or directory

同上理,但是有些可能会要求g+±9以上的 所以再次添加

sudo apt install -y gcc-9 g++-9 -y
# 设置系统默认值
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 900 --slave /usr/bin/g++ g++ /usr/bin/g++-9

# 再次检查
gcc --version

segmentation fault

主要是使用上一个 filesystem 出现 segmentation fault,主要是把编译能过 一运行就不行

定位到这个问题 就用了10分钟,主要是他不报错 就只是segmentation fault,和帅讨论后说是 :

库版本有冲突也会这个效果, 而且感觉一般都是库依赖的比较低层的系统库的问题

截图报错如下

最后找到了解决方案是

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_COMPILER "g++")
set(CMAKE_CXX_FLAGS "--std=c++17 -lstdc++fs")

这样是不够的 需要把flag写到link libraries 我真的涨见识了,所以我最后写成了这样

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_COMPILER "g++")
set(CMAKE_CXX_FLAGS "--std=c++17 -lstdc++fs")
add_library(datasets OBJECT)
target_sources(datasets PRIVATE KITTIOdometry.cpp)
target_compile_features(datasets PRIVATE cxx_std_17)
target_link_libraries(datasets PUBLIC Eigen3::Eigen "-lstdc++fs")

关于filesystem的一系列讨论:


赠人点赞 手有余香 😆;正向回馈 才能更好开放记录 hhh

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kin-Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值