视觉slam十四讲-第6讲非线性优化篇踩坑
视觉slam十四讲-第6讲非线性优化篇踩坑
为了以后方便,我利用ROS-kinetic实践《视觉slam十四讲》中的程序,其中在6.3节Ceres实践篇中,遇到了一个坑,搞了一下午才搞出来。在按照书中内容编写好程序及库依赖后,编译程序,出现了下面的错误 :
undefined reference to symbol ‘pthread_rwlock_wrlock@@GLIBC_2.2.5’这个搞了一下午,查到很多方法都集中再一点上,libpthread.a这个库没有引用好。但是每个方法试过后都不管用,直到我重新检查我的CMakeLists文件后才发现问题,这里是ceres库没有引用好,格式出错了。正确的格式为:
find_package(Ceres REQUIRED)
include_directories(${CERES_INCLUDE_DIRS})
add_executable(ceresCurveFitting ceresCurveFitting.cpp)
target_link_libraries(ceresCurveFitting ${OpenCV_LIBS} ${CERES_LIBRARIES})
之前我一直把ceres大小写搞错了,真尴尬。不过在修改前,我也先用网上的方法自查了一遍libpthread.a中pthread_rwlock_wrlock()函数,后来发现这个真没有,查看pthread_rwlock_wrlock()方法为:
man -k pthread_rwlock_wrlock
添加方法为:
sudo apt-get install glibc-doc
sudo apt-get install manpages-posix-dev
编译后有可能出现chrono库里的函数没有声明的错误,这里主要是c++的引用标准出现错误,可以在CMakeLists文件中加入一句话:
set(CMAKE_CXX_FLAGS "-std=c++11")
【视觉slam十四讲-第6讲非线性优化篇踩坑】最后,用ROS编写《视觉slam十四讲》中的程序,其实在main函数中直接写就可以了,相当于写一个普通的c++程序,之后再用ROS编译。
推荐阅读
- 别墅庭院设计,不同的别墅庭院设计也给人视觉上完全不一样的!
- 我与我的小区(十四)
- 遇见第三十四天
- 《癸酉金石二十四节气之“清明”》
- 推酷《Guru|推酷《Guru Weekly》第十四期
- 二十四节气灸“白露灸”
- 《教育心理学》读书笔记十四---学校班级管理的现状分析与策略研究
- 《青春在硬盘里灼烧》第十四章:名利猛贪无有足
- Ruth之第二十四天复盘
- 进阶任务十四