C++ Cmake+;Boost 1.71库本身中未定义的引用

C++ Cmake+;Boost 1.71库本身中未定义的引用,c++,opencv,boost,cmake,linker,C++,Opencv,Boost,Cmake,Linker,我正在使用CMAKE构建我的项目: cmake_minimum_required(VERSION 3.14) set (CMAKE_CXX_STANDARD 11) project(saryxo_checker) find_package( OpenCV REQUIRED ) find_package( Boost 1.71 REQUIRED COMPONENTS program_options filesystem system ) set(SOURCE_FILES ${

我正在使用CMAKE构建我的项目:

cmake_minimum_required(VERSION 3.14)
 set (CMAKE_CXX_STANDARD 11)
 project(saryxo_checker)
 find_package( OpenCV REQUIRED )
 find_package( Boost 1.71 REQUIRED COMPONENTS program_options filesystem system )

 set(SOURCE_FILES 
    ${CMAKE_CURRENT_LIST_DIR}/src/main.cpp
    ${CMAKE_CURRENT_LIST_DIR}/src/FeatureEvaluator.cpp
    ${CMAKE_CURRENT_LIST_DIR}/src/Converter.cpp
    ${CMAKE_CURRENT_LIST_DIR}/core/util.cpp)
 include_directories(
    ${CMAKE_CURRENT_LIST_DIR}/include
    ${CMAKE_CURRENT_LIST_DIR}/core
    ${OpenCV_INCLUDE_DIR}
    ${Boost_INCLUDE_DIR})

 add_executable(saryxo_checker ${SOURCE_FILES})
 target_link_libraries(saryxo_checker ${OpenCV_LIBS} ${Boost_LIBRARIES})
但是,它在链接过程中抛出一个错误。错误被抛出Boost内部

 [ 20%] Linking CXX executable saryxo_checker
 CMakeFiles/saryxo_checker.dir/src/main.cpp.o: In Function »__static_initialization_and_destruction_0(int, int)«:
 /usr/local/include/boost/system/error_code.hpp:221: Warning: undefined reference to »boost::system::generic_category()«
 /usr/local/include/boost/system/error_code.hpp:222: Warning: undefined reference to »boost::system::generic_category()«
 /usr/local/include/boost/system/error_code.hpp:223: Warning: undefined reference to »boost::system::system_category()«
 CMakeFiles/saryxo_checker.dir/src/main.cpp.o: In function »boost::program_options::basic_command_line_parser<char>::basic_command_line_parser(int, char const* const*)«:
 /usr/local/include/boost/program_options/detail/parsers.hpp:44: Warning: undefined reference to »boost::program_options::detail::cmdline::cmdline(std::__debug::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)«
 CMakeFiles/saryxo_checker.dir/src/main.cpp.o:(.data.rel.ro._ZTVN5boost15program_options11typed_valueIicEE[_ZTVN5boost15pro ram_options11typed_valueIicEE]+0x40): Warning: undefined reference to »boost::program_options::value_semantic_codecvt_helper<char>::parse(boost::any&, std::__debug::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, bool) const«
 CMakeFiles/keypoint_tracker_evaluator_saryxoS_Trian.dir/src/main.cpp.o:(.data.rel.ro._ZTVN5boost15program_options11typed_valueIjcEE[_ZTVN5boost15program_options11typed_valueIjcEE]+0x40): Warning: undefined reference to »boost::program_options::value_semantic_codecvt_helper<char>::parse(boost::any&, std::__debug::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, bool) const«
 CMakeFiles/saryxo_checker.dir/src/main.cpp.o:(.data.rel.ro._ZTVN5boost15program_options11typed_valueINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcEE[_ZTVN5boost15program_options11typed_valueINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcEE]+0x40): Warning: undefined reference to »boost::program_options::value_semantic_codecvt_helper<char>::parse(boost::any&, std::__debug::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, bool) const«
 CMakeFiles/saryxo_checker.dir/src/main.cpp.o: In function »boost::program_options::typed_value<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char>::xparse(boost::any&, std::__debug::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) const«:
 /usr/local/include/boost/program_options/detail/value_semantic.hpp:167: Warning: undefined reference to »boost::program_options::validate(boost::any&, std::__debug::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, int)«
 CMakeFiles/saryxo_checker.dir/src/FeatureEvaluator.cpp.o: In function »__static_initialization_and_destruction_0(int, int)«:
 /usr/local/include/boost/system/error_code.hpp:221: Warning: undefined reference to »boost::system::generic_category()«
 /usr/local/include/boost/system/error_code.hpp:222: Warning: undefined reference to »boost::system::generic_category()«
 /usr/local/include/boost/system/error_code.hpp:223: Warning: undefined reference to »boost::system::system_category()«
 CMakeFiles/saryxo_checker.dir/src/Converter.cpp.o: In function »__static_initialization_and_destruction_0(int, int)«:
 /usr/local/include/boost/system/error_code.hpp:221: Warning: undefined reference to »boost::system::generic_category()«
 /usr/local/include/boost/system/error_code.hpp:222: Warning: undefined reference to »boost::system::generic_category()«
 /usr/local/include/boost/system/error_code.hpp:223: Warning: undefined reference to »boost::system::system_category()«
 CMakeFiles/saryxo_checker.dir/src/Converter.cpp.o: In function »boost::system::error_code::error_code()«:
 /usr/local/include/boost/system/error_code.hpp:322: Warning: undefined reference to »boost::system::system_category()«
 CMakeFiles/saryxo_checker.dir/src/Converter.cpp.o: In function »boost::system::error_code::clear()«:
 /usr/local/include/boost/system/error_code.hpp:350: Warning: undefined reference to »boost::system::system_category()«
 CMakeFiles/saryxo_checker.dir/core/util.cpp.o: In in function »__static_initialization_and_destruction_0(int, int)«:
 /usr/local/include/boost/system/error_code.hpp:221: Warning: undefined reference to »boost::system::generic_category()«
 /usr/local/include/boost/system/error_code.hpp:222: Warning: undefined reference to »boost::system::generic_category()«
 /usr/local/include/boost/system/error_code.hpp:223: Warning: undefined reference to »boost::system::system_category()«
 collect2: error: ld returned 1 exit status
 CMakeFiles/saryxo_checker.dir/build.make:179: recipe for target 'saryxo_checker' failed
 make[3]: *** [saryxo_checker] Error 1
 CMakeFiles/Makefile2:72: recipe for target 'CMakeFiles/saryxo_checker.dir/all' failed
 make[2]: *** [CMakeFiles/saryxo_checker.dir/all] Error 2
 CMakeFiles/Makefile2:84: recipe for target 'CMakeFiles/saryxo_checker.dir/rule' failed
 make[1]: *** [CMakeFiles/saryxo_checker.dir/rule] Error 2
 Makefile:118: recipe for target 'saryxo_checker' failed
 make: *** [saryxo_checker] Error 2
[20%]链接CXX可执行文件saryxo\u检查器
CMakeFiles/saryxo\u checker.dir/src/main.cpp.o:In Function»静态初始化和销毁0(int,int)«:
/usr/local/include/boost/system/error_code.hpp:221:警告:未定义对»boost::system::generic_category()的引用
/usr/local/include/boost/system/error_code.hpp:222:警告:未定义对»boost::system::generic_category()的引用
/usr/local/include/boost/system/error_code.hpp:223:警告:未定义对»boost::system::system_category()的引用«
CMakeFiles/saryxo_checker.dir/src/main.cpp.o:In function»boost::program_options::basic_command_line_parser::basic_command_line_parser(int,char const*const*)«:
/usr/local/include/boost/program_options/detail/parsers.hpp:44:警告:未定义对»boost::program_options::detail::cmdline::cmdline::cmdline的引用(std::_debug::vector const&)«
CMakeFiles/saryxo_checker.dir/src/main.cpp.o:(.data.rel.ro.\u ztvn5boost15程序选项11typed_值icee[\u ztvn5boost15程序选项11typed_值icee]+0x40):警告:未定义对»boost::program_选项::值»语义»编解码器帮助器»解析(boost::any&,std:\u调试::向量常数««const»
CMakeFiles/keypoint\u tracker\u evaluator\u saryxoS\u Trian.dir/src/main.cpp.o:(.data.rel.ro.\ztvn5boost15程序选项11typed\u valueIjcEE[\u ztvn5boost15程序选项11typed\u valueIjcEE]+0x40):警告:未定义的引用»boost::程序选项::值»语义编解码器vt\u帮助程序::解析(boost::any&~,std:\uu调试::向量常量&~~~~~~~~~
CMakeFiles/saryxo_checker.dir/src/main.cpp.o:(.data.rel.ro.ZTvn5Boost15程序选项11类型化的值inst7基本类型化的字符串化的字符串化的字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符化字符:警告:未定义对»boost::program\u options::value\u semantic\u codecvt\u helper::parse(boost::any&,std::\u调试::vector const&,bool)const«
CMakeFiles/saryxo_checker.dir/src/main.cpp.o:In function»boost::program_options::typed_value::xparse(boost::any&,std::_debug::vector const&)const«:
/usr/local/include/boost/program_options/detail/value_semantic.hpp:167:警告:未定义对»boost::program_options::validate(boost::any&,std::_调试::vector const&,std:_uCXX11::basic_string*,int)«
CMakeFiles/saryxo\u checker.dir/src/FeatureEvaluator.cpp.o:函数中»静态»初始化»和»销毁»0(int,int)«:
/usr/local/include/boost/system/error_code.hpp:221:警告:未定义对»boost::system::generic_category()的引用
/usr/local/include/boost/system/error_code.hpp:222:警告:未定义对»boost::system::generic_category()的引用
/usr/local/include/boost/system/error_code.hpp:223:警告:未定义对»boost::system::system_category()的引用«
CMakeFiles/saryxo\u checker.dir/src/Converter.cpp.o:In function»静态初始化和销毁0(int,int)«:
/usr/local/include/boost/system/error_code.hpp:221:警告:未定义对»boost::system::generic_category()的引用
/usr/local/include/boost/system/error_code.hpp:222:警告:未定义对»boost::system::generic_category()的引用
/usr/local/include/boost/system/error_code.hpp:223:警告:未定义对»boost::system::system_category()的引用«
CMakeFiles/saryxo\u checker.dir/src/Converter.cpp.o:在函数»boost::system::error\u code::error\u code()«:
/usr/local/include/boost/system/error_code.hpp:322:警告:未定义对»boost::system::system_category()的引用«
CMakeFiles/saryxo_checker.dir/src/Converter.cpp.o:在函数»boost::system::error\u code::clear()
/usr/local/include/boost/system/error_code.hpp:350:警告:未定义对»boost::system::system_category()的引用«
CMakeFiles/saryxo\u checker.dir/core/util.cpp.o:In-In-function»静态初始化和销毁0(int,int)«:
/usr/local/include/boost/system/error_code.hpp:221:警告:未定义对»boost::system::generic_category()的引用
/usr/local/include/boost/system/error_code.hpp:222:警告:未定义对»boost::system::generic_category()的引用
/usr/local/include/boost/system/error_code.hpp:223:警告:未定义对»boost::system::system_category()的引用«
collect2:错误:ld返回了1个退出状态
CMakeFiles/saryxo_checker.dir/build.make:179:目标“saryxo_checker”的配方失败
make[3]:***[saryxo_checker]错误1
CMakeFiles/Makefile2:72:目标“CMakeFiles/saryxo_checker.dir/all”的配方失败
生成[2]:***[CMakeFiles/saryxo_checker.dir/all]错误2
CMakeFiles/Makefile2:84:目标“CMakeFiles/saryxo_checker.dir/rule”的配方失败
make[1]:***[CMakeFiles/saryxo_checker.dir/rule]错误2
Makefile:118:目标“saryxo_检查器”的配方失败
make:**[saryxo_checker]错误2
我尝试在调试模式下构建boost,因为我也在调试模式下构建程序,但错误保持不变。可能是什么

  • 操作系统:Ubuntu 18.04
  • CMake:3.14
  • 增加1.71

请将错误日志作为文本添加到问题帖子中,而不是作为指向外部站点的链接。这是堆栈溢出的一个要求。您可以使用与代码相同的方式格式化日志(使用
Ctrl+K
{}
按钮)。好的,我发现,“system”在某个点上已经变成了一个只包含头的模块(肯定是从1.70开始的,但可能更早),所以在组件中指定它不知何故会弄乱它。删除它实际上修复了很多问题。剩下的唯一未定义引用是program_options中的引用。这很可能是一个bug。我将尝试询问boost的github。