系统环境
ubuntu18,opencv就是默认和ros一起安装的版本,opencv3.2,sophus模板类和非模板类都安装了。
报错信息
主要的原因就是:里面的代码用的是模板类的sophus库,而我安装模板类sophus的时候没有像这篇博客一样Sophus库安装和使用
所以我还需要在cmake中去手动链接fmt库
解决方案
哪个cpp使用了sophus,然后报了上面的错误,就在cmakelist中对应的链接位置添加fmt即可。
修改的cmakelist如下:
cmake_minimum_required(VERSION 2.8)
project(vo1)set(CMAKE_BUILD_TYPE "Release")
add_definitions("-DENABLE_SSE")
set(CMAKE_CXX_FLAGS "-std=c++11 -O2 ${SSE_FLAGS} -msse4")
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)find_package(OpenCV 3 REQUIRED)
find_package(G2O REQUIRED)
find_package(Sophus REQUIRED)
find_package(fmt REQUIRED)include_directories(${OpenCV_INCLUDE_DIRS}${G2O_INCLUDE_DIRS}${Sophus_INCLUDE_DIRS}"/usr/include/eigen3/"
)add_executable(orb_cv orb_cv.cpp)
target_link_libraries(orb_cv ${OpenCV_LIBS})add_executable(orb_self orb_self.cpp)
target_link_libraries(orb_self ${OpenCV_LIBS})# add_executable( pose_estimation_2d2d pose_estimation_2d2d.cpp extra.cpp ) # use this if in OpenCV2
add_executable(pose_estimation_2d2d pose_estimation_2d2d.cpp)
target_link_libraries(pose_estimation_2d2d ${OpenCV_LIBS})# # add_executable( triangulation triangulation.cpp extra.cpp) # use this if in opencv2
add_executable(triangulation triangulation.cpp)
target_link_libraries(triangulation ${OpenCV_LIBS})add_executable(pose_estimation_3d2d pose_estimation_3d2d.cpp)
target_link_libraries(pose_estimation_3d2dg2o_core g2o_stuff${OpenCV_LIBS} fmt::fmt)add_executable(pose_estimation_3d3d pose_estimation_3d3d.cpp)
target_link_libraries(pose_estimation_3d3dg2o_core g2o_stuff${OpenCV_LIBS} fmt::fmt)
本质上因为安装sophus模板类的时候依赖fmt的库文件,所以后面使用sophus的时候都需要去链接fmt库,我也懒得重新安装了,就手动链接。