视觉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")

最后,用ROS编写《视觉slam十四讲》中的程序,其实在main函数中直接写就可以了,相当于写一个普通的c++程序,之后再用ROS编译。

你可能感兴趣的:(SLAM)