视觉SLAM十四讲(第6讲及以后)中调用g2o库,编译时出现找不到g2o相关模块和函数的错误
undefined reference to g2o XXX
使用网上找到的方法g2o库出现undefined reference to错误,编译仍报错
/usr/bin/ld: 找不到 -lg2o_core
/usr/bin/ld: 找不到 -lg2o_stuff
后来查找到了库文件的存放位置,发现最新的g2o库名字有所变化,新库名多了一个后缀“_d”,完整名称为:libg2o_core_d.so
, libg2o_stuff_d.so
因此只需将CMakeLists里链接库的名称修改一下
target_link_libraries(g2oCurveFitting g2o_core_d g2o_stuff_d)
编译成功
第六讲的完整CMakeLists代码如下,供参考
cmake_minimum_required(VERSION 2.8)
project(ch6)
set(CMAKE_BUILD_TYPE Release)
set(CMAKE_CXX_FLAGS "-std=c++14 -O3")
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
# OpenCV
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
# Ceres
find_package(Ceres REQUIRED)
include_directories(${CERES_INCLUDE_DIRS})
# g2o
find_package(G2O REQUIRED)
include_directories(${G2O_INCLUDE_DIRS})
# Eigen
include_directories("/usr/include/eigen3")
add_executable(gaussNewton gaussNewton.cpp)
target_link_libraries(gaussNewton ${OpenCV_LIBS})
add_executable(ceresCurveFitting ceresCurveFitting.cpp)
target_link_libraries(ceresCurveFitting ${OpenCV_LIBS} ${CERES_LIBRARIES})
add_executable(g2oCurveFitting g2oCurveFitting.cpp)
target_link_libraries(g2oCurveFitting ${OpenCV_LIBS} )#${G2O_CORE_LIBRARY} ${G2O_STUFF_LIBRARY}
target_link_libraries(g2oCurveFitting g2o_core_d g2o_stuff_d) #修改了g2o库名