gaoxiang12 / slambook

MIT License
6.84k stars 3.26k forks source link

一个解决ch4代码关于Sophus编译运行错误的方法 #157

Closed roachsinai closed 5 years ago

roachsinai commented 5 years ago

代码环境

slambook/ch4/useSophus/CMakeLists.txt

find_package( Sophus REQUIRED )
include_directories( ${Sophus_INCLUDE_DIRS} )
add_executable( useSophus useSophus.cpp )
target_link_libraries( useSophus ${Sophus_LIBRARIES} )

slambook/3rdparty/Sophus

git checkout a621ff

上面这种也就是高老师书中所述的情况下,直接编译Sophus会出现给左值赋值错误,lvalue required as left operand of assignment

解决方法

slambook/3rdparty/Sophus/CMakeLists.txt中制定使用c++03编译就可以了:add_definitions(-std=c++03)。 然后正常编译ch4运行就可以了。

问题原因

看到解决方法原因应该比较明了:使用的老代码,但是编译的时候使用的新标准(可能默认c++11)。

Refs

  1. Sophus库模板类的使用问题_SLAM十四讲
  2. CMake之find_package
  3. Error: lvalue required as left operand of assignment what to do
  4. Bug 51013 - complex::{imag,real}() should maintain lvalue-returning extension in C++11

上面给的连接第一个是给出了直接编译Sophus最新代码的并使用的方法,但是这个方法也不是再新了,比如会提示SO3是已经弃用的类型。

疑问

虽然可以正常运行了,但是实在想不明白ch4cmake是如何找到sophus的?!希望知道的告知一下。

Search Procedure