SLAM14讲错误笔记(第五讲OpenCV篇)

错误一

出现错误:安装完成Opencv3.4.16后,运行示例程序(imageBasics),make报错。

/usr/bin/ld: CMakeFiles/undistortImage.dir/undistortImage.o: in function `main':
undistortImage.cpp:(.text+0xdc): undefined reference to `cv::imread(cv::String const&, int)'
/usr/bin/ld: undistortImage.cpp:(.text+0x120): undefined reference to `cv::Mat::Mat(int, int, int)'
/usr/bin/ld: undistortImage.cpp:(.text+0x49f): undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
/usr/bin/ld: undistortImage.cpp:(.text+0x502): undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
/usr/bin/ld: undistortImage.cpp:(.text+0x52a): undefined reference to `cv::waitKey(int)'
/usr/bin/ld: undistortImage.cpp:(.text+0x53b): undefined reference to `cv::Mat::~Mat()'
/usr/bin/ld: undistortImage.cpp:(.text+0x54a): undefined reference to `cv::Mat::~Mat()'
/usr/bin/ld: undistortImage.cpp:(.text+0x5f8): undefined reference to `cv::Mat::~Mat()'
/usr/bin/ld: undistortImage.cpp:(.text+0x610): undefined reference to `cv::Mat::~Mat()'
/usr/bin/ld: CMakeFiles/undistortImage.dir/undistortImage.o: in function `cv::String::String(char const*)':
undistortImage.cpp:(.text._ZN2cv6StringC2EPKc[_ZN2cv6StringC5EPKc]+0x58): undefined reference to `cv::String::allocate(unsigned long)'
/usr/bin/ld: CMakeFiles/undistortImage.dir/undistortImage.o: in function `cv::String::~String()':
undistortImage.cpp:(.text._ZN2cv6StringD2Ev[_ZN2cv6StringD5Ev]+0x18): undefined reference to `cv::String::deallocate()'
/usr/bin/ld: CMakeFiles/undistortImage.dir/undistortImage.o: in function `cv::String::String(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
undistortImage.cpp:(.text._ZN2cv6StringC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE[_ZN2cv6StringC5ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE]+0x61): undefined reference to `cv::String::allocate(unsigned long)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/undistortImage.dir/build.make:84:undistortImage] 错误 1
make[1]: *** [CMakeFiles/Makefile2:78:CMakeFiles/undistortImage.dir/all] 错误 2
make: *** [Makefile:84:all] 错误 2

错误原因:可能是没有索引到相关文件

解决措施:在CMakeLists.txt文件中添加

find_package( OpenCV REQUIRED )

注意:OpenCV要注意大小写,指定版本也可表示为

find_package( OpenCV 3.4.16 REQUIRED )

错误二

出现错误(实际上是自己傻了):在build文件中编译后执行

./imageBasics

只出现文件二字。后续输入图像路径报错:

./ubuntu.png: 行 1: $'\211PNG\r':未找到命令
./ubuntu.png: 行 2: $'\032':未找到命令
./ubuntu.png: 行 3: 未预期的符号“newline”附近有语法错误
IHDR���%eLzTXtRaw profile type exifx��J��L�Rc#.Ss
                                                 3K33 0�4�4J2,
C\�p���zV       giTXtXML:com.adobe.xmp<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>'

原因:实际上要求执行命令与图像同时输入

解决措施:改为输入

./imageBasics ../ubuntu.png

注:./为当前文件夹,../为上一个文件夹(图像在上一层),使用绝对路径也是可以的。

也可参考cv::imread的路径输入,声明图片路径也可以。如OpenCV应用方法——图像读取函数cv::imread()的几种使用方式_imread方法_墨小鱼的博客-CSDN博客

错误三

出现错误:在make点云拼接的joinMap.cpp时报错。

/usr/bin/ld: CMakeFiles/joinMap.dir/joinMap.o: in function `std::make_unsigned<int>::type fmt::v8::detail::to_unsigned<int>(int)':
joinMap.cpp:(.text._ZN3fmt2v86detail11to_unsignedIiEENSt13make_unsignedIT_E4typeES4_[_ZN3fmt2v86detail11to_unsignedIiEENSt13make_unsignedIT_E4typeES4_]+0x23): undefined reference to `fmt::v8::detail::assert_fail(char const*, int, char const*)'
/usr/bin/ld: CMakeFiles/joinMap.dir/joinMap.o: in function `std::make_unsigned<long>::type fmt::v8::detail::to_unsigned<long>(long)':
joinMap.cpp:(.text._ZN3fmt2v86detail11to_unsignedIlEENSt13make_unsignedIT_E4typeES4_[_ZN3fmt2v86detail11to_unsignedIlEENSt13make_unsignedIT_E4typeES4_]+0x25): undefined reference to `fmt::v8::detail::assert_fail(char const*, int, char const*)'
/usr/bin/ld: CMakeFiles/joinMap.dir/joinMap.o: in function `Sophus::SO3Base<Sophus::SO3<double, 0> >::normalize()':
joinMap.cpp:(.text._ZN6Sophus7SO3BaseINS_3SO3IdLi0EEEE9normalizeEv[_ZN6Sophus7SO3BaseINS_3SO3IdLi0EEEE9normalizeEv]+0x12c): undefined reference to `fmt::v8::vprint(fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<fmt::v8::appender, char> >)'
/usr/bin/ld: joinMap.cpp:(.text._ZN6Sophus7SO3BaseINS_3SO3IdLi0EEEE9normalizeEv[_ZN6Sophus7SO3BaseINS_3SO3IdLi0EEEE9normalizeEv]+0x19b): undefined reference to `fmt::v8::vprint(fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<fmt::v8::appender, char> >)'
/usr/bin/ld: CMakeFiles/joinMap.dir/joinMap.o: in function `fmt::v8::basic_format_parse_context<char, fmt::v8::detail::error_handler>::on_error(char const*)':
joinMap.cpp:(.text._ZN3fmt2v826basic_format_parse_contextIcNS0_6detail13error_handlerEE8on_errorEPKc[_ZN3fmt2v826basic_format_parse_contextIcNS0_6detail13error_handlerEE8on_errorEPKc]+0xb): undefined reference to `fmt::v8::detail::error_handler::on_error(char const*)'
/usr/bin/ld: CMakeFiles/joinMap.dir/joinMap.o: in function `int fmt::v8::detail::parse_nonnegative_int<char>(char const*&, char const*, int)':
joinMap.cpp:(.text._ZN3fmt2v86detail21parse_nonnegative_intIcEEiRPKT_S5_i[_ZN3fmt2v86detail21parse_nonnegative_intIcEEiRPKT_S5_i]+0x7b): undefined reference to `fmt::v8::detail::assert_fail(char const*, int, char const*)'
/usr/bin/ld: CMakeFiles/joinMap.dir/joinMap.o: in function `void fmt::v8::detail::check_string_type_spec<fmt::v8::detail::error_handler&>(fmt::v8::presentation_type, fmt::v8::detail::error_handler&)':
joinMap.cpp:(.text._ZN3fmt2v86detail22check_string_type_specIRNS1_13error_handlerEEEvNS0_17presentation_typeEOT_[_ZN3fmt2v86detail22check_string_type_specIRNS1_13error_handlerEEEvNS0_17presentation_typeEOT_]+0x28): undefined reference to `fmt::v8::detail::error_handler::on_error(char const*)'
/usr/bin/ld: CMakeFiles/joinMap.dir/joinMap.o: in function `char const* fmt::v8::detail::parse_align<char, fmt::v8::detail::specs_checker<fmt::v8::detail::dynamic_specs_handler<fmt::v8::basic_format_parse_context<char, fmt::v8::detail::error_handler> > >&>(char const*, char const*, fmt::v8::detail::specs_checker<fmt::v8::detail::dynamic_specs_handler<fmt::v8::basic_format_parse_context<char, fmt::v8::detail::error_handler> > >&)':
joinMap.cpp:(.text._ZN3fmt2v86detail11parse_alignIcRNS1_13specs_checkerINS1_21dynamic_specs_handlerINS0_26basic_format_parse_contextIcNS1_13error_handlerEEEEEEEEEPKT_SD_SD_OT0_[_ZN3fmt2v86detail11parse_alignIcRNS1_13specs_checkerINS1_21dynamic_specs_handlerINS0_26basic_format_parse_contextIcNS1_13error_handlerEEEEEEEEEPKT_SD_SD_OT0_]+0x7e): undefined reference to `fmt::v8::detail::assert_fail(char const*, int, char const*)'
/usr/bin/ld: CMakeFiles/joinMap.dir/joinMap.o: in function `char const* fmt::v8::detail::parse_width<char, fmt::v8::detail::specs_checker<fmt::v8::detail::dynamic_specs_handler<fmt::v8::basic_format_parse_context<char, fmt::v8::detail::error_handler> > >&>(char const*, char const*, fmt::v8::detail::specs_checker<fmt::v8::detail::dynamic_specs_handler<fmt::v8::basic_format_parse_context<char, fmt::v8::detail::error_handler> > >&)':
joinMap.cpp:(.text._ZN3fmt2v86detail11parse_widthIcRNS1_13specs_checkerINS1_21dynamic_specs_handlerINS0_26basic_format_parse_contextIcNS1_13error_handlerEEEEEEEEEPKT_SD_SD_OT0_[_ZN3fmt2v86detail11parse_widthIcRNS1_13specs_checkerINS1_21dynamic_specs_handlerINS0_26basic_format_parse_contextIcNS1_13error_handlerEEEEEEEEEPKT_SD_SD_OT0_]+0x74): undefined reference to `fmt::v8::detail::assert_fail(char const*, int, char const*)'
/usr/bin/ld: CMakeFiles/joinMap.dir/joinMap.o: in function `void fmt::v8::detail::format_value<char, Eigen::Transpose<Eigen::Matrix<double, 4, 1, 0, 4, 1> > >(fmt::v8::detail::buffer<char>&, Eigen::Transpose<Eigen::Matrix<double, 4, 1, 0, 4, 1> > const&, fmt::v8::detail::locale_ref)':
joinMap.cpp:(.text._ZN3fmt2v86detail12format_valueIcN5Eigen9TransposeINS3_6MatrixIdLi4ELi1ELi0ELi4ELi1EEEEEEEvRNS1_6bufferIT_EERKT0_NS1_10locale_refE[_ZN3fmt2v86detail12format_valueIcN5Eigen9TransposeINS3_6MatrixIdLi4ELi1ELi0ELi4ELi1EEEEEEEvRNS1_6bufferIT_EERKT0_NS1_10locale_refE]+0xc9): undefined reference to `std::locale fmt::v8::detail::locale_ref::get<std::locale>() const'
/usr/bin/ld: CMakeFiles/joinMap.dir/joinMap.o: in function `fmt::v8::detail::fill_t<char>::operator=(fmt::v8::basic_string_view<char>)':
joinMap.cpp:(.text._ZN3fmt2v86detail6fill_tIcEaSENS0_17basic_string_viewIcEE[_ZN3fmt2v86detail6fill_tIcEaSENS0_17basic_string_viewIcEE]+0x39): undefined reference to `fmt::v8::detail::throw_format_error(char const*)'
/usr/bin/ld: CMakeFiles/joinMap.dir/joinMap.o: in function `char const* fmt::v8::detail::do_parse_arg_id<char, fmt::v8::detail::parse_width<char, fmt::v8::detail::specs_checker<fmt::v8::detail::dynamic_specs_handler<fmt::v8::basic_format_parse_context<char, fmt::v8::detail::error_handler> > >&>(char const*, char const*, fmt::v8::detail::specs_checker<fmt::v8::detail::dynamic_specs_handler<fmt::v8::basic_format_parse_context<char, fmt::v8::detail::error_handler> > >&)::width_adapter&>(char const*, char const*, fmt::v8::detail::specs_checker<fmt::v8::detail::dynamic_specs_handler<fmt::v8::basic_format_parse_context<char, fmt::v8::detail::error_handler> > >&)':
joinMap.cpp:(.text._ZN3fmt2v86detail15do_parse_arg_idIcRZNS1_11parse_widthIcRNS1_13specs_checkerINS1_21dynamic_specs_handlerINS0_26basic_format_parse_contextIcNS1_13error_handlerEEEEEEEEEPKT_SE_SE_OT0_E13width_adapterEESE_SE_SE_SG_[_ZN3fmt2v86detail15do_parse_arg_idIcRZNS1_11parse_widthIcRNS1_13specs_checkerINS1_21dynamic_specs_handlerINS0_26basic_format_parse_contextIcNS1_13error_handlerEEEEEEEEEPKT_SE_SE_OT0_E13width_adapterEESE_SE_SE_SG_]+0xe6): undefined reference to `fmt::v8::detail::assert_fail(char const*, int, char const*)'
/usr/bin/ld: CMakeFiles/joinMap.dir/joinMap.o: in function `char const* fmt::v8::detail::do_parse_arg_id<char, fmt::v8::detail::parse_precision<char, fmt::v8::detail::specs_checker<fmt::v8::detail::dynamic_specs_handler<fmt::v8::basic_format_parse_context<char, fmt::v8::detail::error_handler> > >&>(char const*, char const*, fmt::v8::detail::specs_checker<fmt::v8::detail::dynamic_specs_handler<fmt::v8::basic_format_parse_context<char, fmt::v8::detail::error_handler> > >&)::precision_adapter&>(char const*, char const*, fmt::v8::detail::specs_checker<fmt::v8::detail::dynamic_specs_handler<fmt::v8::basic_format_parse_context<char, fmt::v8::detail::error_handler> > >&)':
joinMap.cpp:(.text._ZN3fmt2v86detail15do_parse_arg_idIcRZNS1_15parse_precisionIcRNS1_13specs_checkerINS1_21dynamic_specs_handlerINS0_26basic_format_parse_contextIcNS1_13error_handlerEEEEEEEEEPKT_SE_SE_OT0_E17precision_adapterEESE_SE_SE_SG_[_ZN3fmt2v86detail15do_parse_arg_idIcRZNS1_15parse_precisionIcRNS1_13specs_checkerINS1_21dynamic_specs_handlerINS0_26basic_format_parse_contextIcNS1_13error_handlerEEEEEEEEEPKT_SE_SE_OT0_E17precision_adapterEESE_SE_SE_SG_]+0xe6): undefined reference to `fmt::v8::detail::assert_fail(char const*, int, char const*)'
/usr/bin/ld: CMakeFiles/joinMap.dir/joinMap.o: in function `int fmt::v8::detail::get_dynamic_spec<fmt::v8::detail::width_checker, fmt::v8::basic_format_arg<fmt::v8::basic_format_context<fmt::v8::appender, char> >, fmt::v8::detail::error_handler>(fmt::v8::basic_format_arg<fmt::v8::basic_format_context<fmt::v8::appender, char> >, fmt::v8::detail::error_handler)':
joinMap.cpp:(.text._ZN3fmt2v86detail16get_dynamic_specINS1_13width_checkerENS0_16basic_format_argINS0_20basic_format_contextINS0_8appenderEcEEEENS1_13error_handlerEEEiT0_T1_[_ZN3fmt2v86detail16get_dynamic_specINS1_13width_checkerENS0_16basic_format_argINS0_20basic_format_contextINS0_8appenderEcEEEENS1_13error_handlerEEEiT0_T1_]+0x271): undefined reference to `fmt::v8::detail::error_handler::on_error(char const*)'
/usr/bin/ld: CMakeFiles/joinMap.dir/joinMap.o: in function `int fmt::v8::detail::get_dynamic_spec<fmt::v8::detail::precision_checker, fmt::v8::basic_format_arg<fmt::v8::basic_format_context<fmt::v8::appender, char> >, fmt::v8::detail::error_handler>(fmt::v8::basic_format_arg<fmt::v8::basic_format_context<fmt::v8::appender, char> >, fmt::v8::detail::error_handler)':
joinMap.cpp:(.text._ZN3fmt2v86detail16get_dynamic_specINS1_17precision_checkerENS0_16basic_format_argINS0_20basic_format_contextINS0_8appenderEcEEEENS1_13error_handlerEEEiT0_T1_[_ZN3fmt2v86detail16get_dynamic_specINS1_17precision_checkerENS0_16basic_format_argINS0_20basic_format_contextINS0_8appenderEcEEEENS1_13error_handlerEEEiT0_T1_]+0x271): undefined reference to `fmt::v8::detail::error_handler::on_error(char const*)'
/usr/bin/ld: CMakeFiles/joinMap.dir/joinMap.o: in function `void fmt::v8::detail::check_string_type_spec<fmt::v8::detail::error_handler>(fmt::v8::presentation_type, fmt::v8::detail::error_handler&&)':
joinMap.cpp:(.text._ZN3fmt2v86detail22check_string_type_specINS1_13error_handlerEEEvNS0_17presentation_typeEOT_[_ZN3fmt2v86detail22check_string_type_specINS1_13error_handlerEEEvNS0_17presentation_typeEOT_]+0x28): undefined reference to `fmt::v8::detail::error_handler::on_error(char const*)'
/usr/bin/ld: CMakeFiles/joinMap.dir/joinMap.o: in function `unsigned long long fmt::v8::detail::width_checker<fmt::v8::detail::error_handler>::operator()<int, 0>(int)':
joinMap.cpp:(.text._ZN3fmt2v86detail13width_checkerINS1_13error_handlerEEclIiLi0EEEyT_[_ZN3fmt2v86detail13width_checkerINS1_13error_handlerEEclIiLi0EEEyT_]+0x33): undefined reference to `fmt::v8::detail::error_handler::on_error(char const*)'
/usr/bin/ld: CMakeFiles/joinMap.dir/joinMap.o: in function `unsigned long long fmt::v8::detail::width_checker<fmt::v8::detail::error_handler>::operator()<unsigned int, 0>(unsigned int)':
joinMap.cpp:(.text._ZN3fmt2v86detail13width_checkerINS1_13error_handlerEEclIjLi0EEEyT_[_ZN3fmt2v86detail13width_checkerINS1_13error_handlerEEclIjLi0EEEyT_]+0x33): undefined reference to `fmt::v8::detail::error_handler::on_error(char const*)'
/usr/bin/ld: CMakeFiles/joinMap.dir/joinMap.o:joinMap.cpp:(.text._ZN3fmt2v86detail13width_checkerINS1_13error_handlerEEclIxLi0EEEyT_[_ZN3fmt2v86detail13width_checkerINS1_13error_handlerEEclIxLi0EEEyT_]+0x36): more undefined references to `fmt::v8::detail::error_handler::on_error(char const*)' follow
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/joinMap.dir/build.make:115:joinMap] 错误 1
make[1]: *** [CMakeFiles/Makefile2:76:CMakeFiles/joinMap.dir/all] 错误 2
make: *** [Makefile:84:all] 错误 2

错误原因:未连接到fmt库。

解决:参考Abona的解决方法,在CMakeist.txt中将fmt添加到target_link_libraries部分,如下所示:

target_link_libraries(joinMap ${OpenCV_LIBS} ${Pangolin_LIBRARIES} ${Sophus_INCLUDE_DIRS} fmt)

错误四:重新编译jointMap报错

// 部分错误代码
/usr/local/include/sigslot/signal.hpp:109:79: error: ‘decay_t’ is not a member of ‘std’; did you mean ‘decay’?
  109 | constexpr bool is_weak_ptr_compatible_v = detail::is_weak_ptr_compatible<std::decay_t<P>>::value;
      |                                                                               ^~~~~~~
      |                                                                               decay
/usr/local/include/sigslot/signal.hpp:109:79: error: ‘decay_t’ is not a member of ‘std’; did you mean ‘decay’?
  109 | constexpr bool is_weak_ptr_compatible_v = detail::is_weak_ptr_compatible<std::decay_t<P>>::value;
      |                                                                               ^~~~~~~
      |                                                                               decay
/usr/local/include/sigslot/signal.hpp:109:87: error: template argument 1 is invalid
  109 | constexpr bool is_weak_ptr_compatible_v = detail::is_weak_ptr_compatible<std::decay_t<P>>::value;
      |                                                                                       ^
/usr/local/include/sigslot/signal.hpp:109:92: error: ‘::value’ has not been declared
  109 | constexpr bool is_weak_ptr_compatible_v = detail::is_weak_ptr_compatible<std::decay_t<P>>::value;
      |                                                                                            ^~~~~
/usr/local/include/sigslot/signal.hpp:132:53: error: ‘remove_pointer_t’ is not a member of ‘std’; did you mean ‘remove_pointer’?
  132 |                                                std::remove_pointer_t<T>>::value;
      |                                                     ^~~~~~~~~~~~~~~~
      |                                                     remove_pointer
/usr/local/include/sigslot/signal.hpp:132:53: error: ‘remove_pointer_t’ is not a member of ‘std’; did you mean ‘remove_pointer’?
  132 |                                                std::remove_pointer_t<T>>::value;
      |                                                     ^~~~~~~~~~~~~~~~
      |                                                     remove_pointer

错误原因:C++版本不同,作者使用C++11进行编译,可以将CMakeLists.txt文件中添加或更改将Cmake版本限制为14以上即可

set( CMAKE_CXX_FLAGS "-std=c++14 -O3")

(不知道为什么第一次执行没有报错,而多日之后重新编译报错

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值