记录学习高博的《视觉SLAM十四讲》ch5过程中自己遇到的问题,分享也是记录,大家有什么问题可以一起讨论沟通,互相学习!!!
问题1:opencv配置报错
首先,ch5中的示例程序需要安装opencv库,第一步一定要安装好opencv库,opencv库的安装这里不再赘述,由于在前几讲中我安装了eigen3.4.0库,并随之配置了sophus库,但不知为何配置opencv总是报下面的错误。
解决方法:
于是开始了度娘模式,总结到这个错误通常与Eigen库的AVX512支持有关。首先,确保当前使用的是与OpenCV兼容的Eigen版本。可以尝试以下步骤来解决问题:
(1)更新Eigen: 下载最新版本的Eigen库。(当前我下载的就是最新的Eigen版本)
(2)检查AVX512支持: 确保你的处理器和编译器支持AVX512指令集。若不支持,考虑禁用AVX512优化。
cmake -D CMAKE_BUILD_TYPE=Release -D WITH_AVX512=OFF ..
(3)配置CMake: 在CMake配置阶段,确保Eigen的路径被正确设置,并且没有不兼容的配置选项。
一通操作下来并没有什么卵用,于是开始检查Eigen库的版本,发现明明安装的是3.4.0版本,但在Macros.h中查看的版本是3.4.90,令我十分不解,至今也不知道为什么!!!
我想大概是与这个有关系,于是尝试卸载当前安装的Eigen库,重新安装配置了Eigen3.3.9版本库,安装结束后同样方式查看版本号,这时就正常显示3.3.9版本了,接下来尝试重新编译下opencv,此时成功编译!!!!!喜大普奔!!!!!
至于为什么安装eigen3.4.0版本后系统会显示3.4.90版本,如果友友们知道还请麻烦留言或评论告诉我一声!感谢感谢!!!
问题2:重新配置sophus库内存不足
由于之前的sophus库是通过eigen3.4.0(实则3.4.90)编译的,所以这里需要重新配置sophus库,再重新编译sophus库时遇到了内存不足导致编译进程失败!
c++: fatal error: 已杀死 signal terminated program cc1plus
compilation terminated.
make[2]: *** [test/core/CMakeFiles/test_se3.dir/build.make:76:test/core/CMakeFiles/test_se3.dir/test_se3.cpp.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:388:test/core/CMakeFiles/test_se3.dir/all] 错误 2
make: *** [Makefile:146:all] 错误 2
解决方法:
1、检查系统资源及磁盘空间
通过下面命令检查系统内存
#检查系统内存
free -h
#检查磁盘空间
df -h
2、清理磁盘空间
删除不必要的文件和缓存:
#删除系统上的临时文件
sudo apt-get clean
sudo apt-get autoclean
#删除旧的日志文件
sudo rm -rf /var/log/*.log
#删除缓存文件
sudo rm -rf /var/cache/*
3、增加交换空间(若清理磁盘空间也不能解决)
借鉴其他博主方法,通过创建swap分区增加虚拟机空间,解决了编译杀死进程问题,最后编译成功。下面是创建swap分区的方法:
# 创建分区路径
sudo mkdir -p /var/cache/swap/
# 设置分区的大小
# bs=64M是块大小,count=64是块数量,所以swap空间大小是bs*count=4096MB=4GB
sudo dd if=/dev/zero of=/var/cache/swap/swap0 bs=64M count=64
# 设置该目录权限
sudo chmod 0600 /var/cache/swap/swap0
# 创建SWAP文件
sudo mkswap /var/cache/swap/swap0
# 激活SWAP文件
sudo swapon /var/cache/swap/swap0
# 查看SWAP信息是否正确
sudo swapon -s
参考链接:
【问题解决】C++: fatal error: Killed signal terminated program cc1plus-优快云博客
问题3:示例代码make错误
在编译示例代码imageBasics、rgbd、stereo时,make项目时都会出现类似错误,如下图所示:
解决方法:
这个错误一般是链接问题,说明在编译过程中找不到 OpenCV 库的实现。具体来说,undefined reference 表示在编译阶段找不到对应的库函数实现。这个问题通常发生在以下几种情况:
1、未正确链接 OpenCV 库:确保在 CMakeLists.txt 中正确指定了 OpenCV 库的链接。
2、OpenCV 库路径设置错误:确保 OpenCV 的路径在 CMake 配置中正确设置。
一般通过检查以下几个步骤便可解决:
1、检查 CMakeLists.txt:确认 CMakeLists.txt 文件中包含了对 OpenCV 库的链接。
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
2、确认 OpenCV 已正确安装:使用以下命令检查 OpenCV 是否已安装。
pkg-config --modversion opencv
3、重新配置 CMake:如果已经更改了 CMakeLists.txt 文件,需要重新配置 CMake 以更新设置。
mkdir build && cd build
cmake ..
make
我通过步骤1方法,在每个项目的CMakeLists.txt 中添加opencv库的链接,解决了这个问题!!运行结果如下图所示