错误一
出现错误:安装完成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")
(不知道为什么第一次执行没有报错,而多日之后重新编译报错