对‘fmt::v9::detail::throw_format_error(char const*)’未定义的引用

在学习视觉SLAM十四讲第十二章的过程中,尝试跑了一下单目稠密地图构建的代码,在编译源代码的过程中遇到该问题,编译结果中显示长篇的

CMakeFiles/dense_mapping.dir/dense_mapping.cpp.o:在函数‘unsigned long long fmt::v9::detail::width_checker::operator()(float) [clone .isra.272]’中:
dense_mapping.cpp:(.text.unlikely+0xc):对‘fmt::v9::detail::throw_format_error(char const*)’未定义的引用
CMakeFiles/dense_mapping.dir/dense_mapping.cpp.o:在函数‘unsigned long long fmt::v9::detail::precision_checker::operator()(float) [clone .isra.283]’中:
dense_mapping.cpp:(.text.unlikely+0x1c):对‘fmt::v9::detail::throw_format_error(char const*)’未定义的引用
CMakeFiles/dense_mapping.dir/dense_mapping.cpp.o:在函数‘Sophus::SO3Base >::normalize() [clone .part.626]’中:
dense_mapping.cpp:(.text.unlikely+0x99):对‘fmt::v9::vprint(fmt::v9::basic_string_view, fmt::v9::basic_format_args >)’未定义的引用

经过查阅资料,未定义一般是库和链接的问题。

最后发现在CMakeList.txt文件中没有声明fmt库,也没有在add_excutable和target_link_libraries中对可执行文件和fmt库进行链接操作。

解决方法:在CMakeList.txt文件中添加以下几句

include_directories(${FMT_INCLUDE_DIRS})
find_package(FMT REQUIRED)

并对可执行文件和fmt库进行链接

add_executable(xxx xxx.cpp)
target_link_libraries(xxx ${THIRD_PARTY_LIBS} fmt::fmt)

有的作者说在安装fmt库后应重新安装并编译sophus库,由于我是重新安装并编译后修改的CMakeList.txt文件,所以不清楚是否重新安装并编译sophus库对该问题的影响。

你可能感兴趣的:(SLAM2,ubuntu,ubuntu)