slam ch9
错误信息
1: /usr/bin/ld: cannot find -lGlog
2: undefined reference to `typeinfo for testing::Test‘
主要原因就是找不到对应的Glog的动态库文件
解决方案:
第一步:利用
sudo updatadb
locate libglog 获取路径,并填写在下面文件中;
第二步:
在cmke文件夹下面添加 FindGLOG.cmake文件
# Look for csparse; note the difference in the directory specifications!
FIND_PATH(GLOG_INCLUDE_DIR NAMES cs.h
PATHS
/usr/include/suitesparse
/usr/include
/opt/local/include
/usr/local/include
/sw/include
/usr/local/include/glog/
)
FIND_LIBRARY(GLOG_LIBRARY NAMES glog
PATHS
/usr/lib
/usr/local/lib
/opt/local/lib
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(glog DEFAULT_MSG GLOG_INCLUDE_DIR GLOG_LIBRARY)
第三步: CMakeLists.txt 修改如下:
cmake_minimum_required(VERSION 2.8)
project(bundle_adjustment)
# set(CMAKE_BUILD_TYPE "Release")
# SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
set(CMAKE_CXX_FLAGS "-O3 -std=c++11")
set(CMAKE_CXX_STANDARD 14)
LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
include_directories(${PROJECT_SOURCE_DIR} ${G2O_INCLUDE_DIRS} ${EIGEN3_INCLUDE_DIR} ${CSPARSE_INCLUDE_DIR} ${GLOG_INCLUDE_DIR})
set(FMT_LIBRARIES fmt::fmt)
Find_Package(G2O REQUIRED)
Find_Package(Eigen3 REQUIRED)
Find_Package(Ceres REQUIRED)
Find_Package(Glog REQUIRED)
include_directories(BEFORE ${GLOG_INCLUDE_DIRS})
include_directories(${Ceres_INCLUDE_DIRS})
Find_Package(CSparse REQUIRED)
find_package(Sophus REQUIRED)
include_directories(${Sophus_INCLUDE_DIRS})
add_library(bal_common common.cpp)
add_executable(bundle_adjustment_g2o bundle_adjustment_g2o.cpp common.cpp)
add_executable(bundle_adjustment_ceres bundle_adjustment_ceres.cpp common.cpp)
target_link_libraries(bundle_adjustment_ceres ${CERES_LIBRARIES} bal_common)
target_link_libraries(bundle_adjustment_g2o ${G2O_LIBRARIES} ${FMT_LIBRARIES} ${GLOG_LIBRARIES})
target_link_libraries(bundle_adjustment_g2o ${catkin_LIBRARIES} g2o_core g2o_types_slam3d g2o_solver_csparse g2o_stuff g2o_csparse_extension fmt glog)
编译成功!!
问题2:
运行程序的时候报错误 :
libglog.so.1: undefined symbol: _ZN6gflags14FlagRegistererC1IbEEPKcS3_S3_PT_S5_
ldd libglog.so.1 查看依赖关系;
删除这个文件 重新编译安装ok