编译android版本的opencv源码时,出现error:“to_string“ is not a member of ‘std‘

在Windows环境下编译OpenCV源码时,使用最新NDK版本,并确保CMake版本匹配。解决编译错误to_string不是'std'成员的问题,需在android.toolchain.cmake中设置CMAKE_CXX_STANDARD14等参数。

在windows环境下编译opencv源码,参考:https://blog.csdn.net/xiao19950820/article/details/77119891进行编译,出现了几个问题记录一下。

1、在使用ndk版本的时候,最好用最新的版本,要注意一点是在选择cmake的时候,一定要注意选择对应的cmake,比如你的ndk是r18b,那cmake就要选择在build/cmake/下;

2、编译的时候出现error:"to_string" is not a member of 'std' ,一开始根据网上说加 -std=c++11还是不行,后面再android.toolchain.cmake文件上,加上下面代码就可以了,具体原因:https://blog.csdn.net/eguoguo321/article/details/104006383

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_definitions(-D_GLIBCXX_USE_C99=1)

补充:后面编译的时候再次遇到这个问题,我根据下面的方法,还是不行,最终给我找到了原因:

In file included from /usr/include/spdlog/spdlog.h:12, from /home/lu/Downloads/rune_ku/g2o-master/g2o/stuff/logger.h:34, from /home/lu/Downloads/rune_ku/g2o-master/g2o/stuff/timeutil.cpp:31: /usr/include/spdlog/common.h:127:111: error: ‘basic_runtime’ is not a member of ‘fmt’ 127 | std::is_convertible<T, fmt::basic_string_view<Char>>::value || std::is_same<remove_cvref_t<T>, fmt::basic_runtime<Char>>::value> | ^~~~~~~~~~~~~ /usr/include/spdlog/common.h:127:125: error: template argument 2 is invalid 127 | std::is_convertible<T, fmt::basic_string_view<Char>>::value || std::is_same<remove_cvref_t<T>, fmt::basic_runtime<Char>>::value> | ^~~~ /usr/include/spdlog/common.h:127:138: error: expected ‘{’ before ‘>’ token 127 | std::is_convertible<T, fmt::basic_string_view<Char>>::value || std::is_same<remove_cvref_t<T>, fmt::basic_runtime<Char>>::value> | ^ In file included from /usr/include/spdlog/spdlog.h:12, from /home/lu/Downloads/rune_ku/g2o-master/g2o/stuff/logger.h:34, from /home/lu/Downloads/rune_ku/g2o-master/g2o/stuff/logger.cpp:27: /usr/include/spdlog/common.h:127:111: error: ‘basic_runtime’ is not a member of ‘fmt’ 127 | std::is_convertible<T, fmt::basic_string_view<Char>>::value || std::is_same<remove_cvref_t<T>, fmt::basic_runtime<Char>>::value> | ^~~~~~~~~~~~~ /usr/include/spdlog/common.h:127:125: error: template argument 2 is invalid 127 | std::is_convertible<T, fmt::basic_string_view<Char>>::value || std::is_same<remove_cvref_t<T>, fmt::basic_runtime<Char>>::value> | ^~~~ /usr/include/spdlog/common.h:127:138: error: expected ‘{’ before ‘>’ token 127 | std::is_convertible<T, fmt::basic_string_view<Char>>::value || std::is_same<remove_cvref_t<T>, fmt::basic_runtime<Char>>::value> | ^ In file included from /usr/include/spdlog/spdlog.h:12, from /home/lu/Downloads/rune_ku/g2o-master/g2o/stuff/logger.h:34, from /home/lu/Downloads/rune_ku/g2o-master/g2o/stuff/property.cpp:32: /usr/include/spdlog/common.h:127:111: error: ‘basic_runtime’ is not a member of ‘fmt’ 127 | std::is_convertible<T, fmt::basic_string_view<Char>>::value || std::is_same<remove_cvref_t<T>, fmt::basic_runtime<Char>>::value> | ^~~~~~~~~~~~~ /usr/include/spdlog/common.h:127:125: error: template argument 2 is invalid 127 | std::is_convertible<T, fmt::basic_string_view<Char>>::value || std::is_same<remove_cvref_t<T>, fmt::basic_runtime<Char>>::value> | ^~~~ /usr/include/spdlog/common.h:127:138: error: expected ‘{’ before ‘>’ token 127 | std::is_convertible<T, fmt::basic_string_view<Char>>::value || std::is_same<remove_cvref_t<T>, fmt::basic_runtime<Char>>::value> | ^ make[2]: *** [g2o/stuff/CMakeFiles/stuff.dir/build.make:79: g2o/stuff/CMakeFiles/stuff.dir/timeutil.cpp.o] Error 1 make[2]: *** Waiting for unfinished jobs.... make[2]: *** [g2o/stuff/CMakeFiles/stuff.dir/build.make:191: g2o/stuff/CMakeFiles/stuff.dir/logger.cpp.o] Error 1 make[2]: *** [g2o/stuff/CMakeFiles/stuff.dir/build.make:149: g2o/stuff/CMakeFiles/stuff.dir/property.cpp.o] Error 1 [ 6%] Linking CXX shared library ../../../../../lib/libg2o_parser.so [ 6%] Built target parser_library [ 6%] Building CXX object g2o/examples/interactive_slam/slam_parser/interface/CMakeFiles/interface_library.dir/parser_interface.cpp.o [ 6%] Building CXX object g2o/examples/interactive_slam/slam_parser/interface/CMakeFiles/interface_library.dir/slam_context_interface.cpp.o [ 7%] Linking CXX shared library ../../../../../lib/libg2o_interface.so [ 7%] Built target interface_library make[1]: *** [CMakeFiles/Makefile2:1422: g2o/stuff/CMakeFiles/stuff.dir/all] Error 2 make: *** [Makefile:156: all] Error 2
06-09
In file included from /home/wssn/catkin_ws_gpu/src/VINS-Fusion-gpu/loop_fusion/src/ThirdParty/VocabularyBinary.cpp:1: /home/wssn/catkin_ws_gpu/src/VINS-Fusion-gpu/loop_fusion/src/ThirdParty/VocabularyBinary.hpp: In constructor ‘VINSLoop::Vocabulary::Vocabulary()’: /home/wssn/catkin_ws_gpu/src/VINS-Fusion-gpu/loop_fusion/src/ThirdParty/VocabularyBinary.hpp:31:11: warning: ‘VINSLoop::Vocabulary::nodes’ will be initialized after [-Wreorder] 31 | Node* nodes; | ^~~~~ /home/wssn/catkin_ws_gpu/src/VINS-Fusion-gpu/loop_fusion/src/ThirdParty/VocabularyBinary.hpp:29:13: warning: ‘int32_t VINSLoop::Vocabulary::nWords’ [-Wreorder] 29 | int32_t nWords; | ^~~~~~ /home/wssn/catkin_ws_gpu/src/VINS-Fusion-gpu/loop_fusion/src/ThirdParty/VocabularyBinary.cpp:5:1: warning: when initialized here [-Wreorder] 5 | VINSLoop::Vocabulary::Vocabulary() | ^~~~~~~~ [ 71%] Building CXX object VINS-Fusion-gpu/vins_estimator/CMakeFiles/vins_lib.dir/src/estimator/feature_manager.cpp.o In file included from /home/wssn/catkin_ws_gpu/src/VINS-Fusion-gpu/vins_estimator/src/estimator/estimator.h:37, from /home/wssn/catkin_ws_gpu/src/VINS-Fusion-gpu/vins_estimator/src/estimator/estimator.cpp:10: /home/wssn/catkin_ws_gpu/src/VINS-Fusion-gpu/vins_estimator/src/estimator/../featureTracker/feature_tracker.h:21:10: fatal error: opencv2/cudaoptflow.hpp: 没有那个文件或目录 21 | #include <opencv2/cudaoptflow.hpp> | ^~~~~~~~~~~~~~~~~~~~~~~~~ compilation terminated. /home/wssn/catkin_ws_gpu/src/VINS-Fusion-gpu/loop_fusion/src/pose_graph.cpp: In member function ‘int PoseGraph::detectLoop(KeyFrame*, int)’: /home/wssn/catkin_ws_gpu/src/VINS-Fusion-gpu/loop_fusion/src/pose_graph.cpp:409:47: warning: comparison of integer expressions of different signedness: ‘DBoW2::EntryId’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 409 | if (min_index == -1 || (ret[i].Id < min_index && ret[i].Score > 0.015)) make[2]: *** [VINS-Fusion-gpu/vins_estimator/CMakeFiles/vins_lib.dir/build.make:76:VINS-Fusion-gpu/vins_estimator/CMakeFiles/vins_lib.dir/src/estimator/estimator.cpp.o] 错误 1 make[2]: *** 正在等待未完成的任务.... In file included from /home/wssn/catkin_ws_gpu/src/VINS-Fusion-gpu/loop_fusion/src/ThirdParty/DBoW/DBoW2.h:63, from /home/wssn/catkin_ws_gpu/src/VINS-Fusion-gpu/loop_fusion/src/keyframe.h:24, from /home/wssn/catkin_ws_gpu/src/VINS-Fusion-gpu/loop_fusion/src/pose_graph.h:28, from /home/wssn/catkin_ws_gpu/src/VINS-Fusion-gpu/loop_fusion/src/pose_graph.cpp:12: /home/wssn/catkin_ws_gpu/src/VINS-Fusion-gpu/loop_fusion/src/ThirdParty/DBoW/TemplatedVocabulary.h: In instantiation of ‘void DBoW2::TemplatedVocabulary<TDescriptor, F>::loadBin(const string&) [with TDescriptor = boost::dynamic_bitset<>; F = DBoW2::FBrief; std::string = std::__cxx11::basic_string<char>]’: /home/wssn/catkin_ws_gpu/src/VINS-Fusion-gpu/loop_fusion/src/ThirdParty/DBoW/TemplatedVocabulary.h:439:5: required from ‘DBoW2::TemplatedVocabulary<TDescriptor, F>::TemplatedVocabulary(const string&) [with TDescriptor = boost::dynamic_bitset<>; F = DBoW2::FBrief; std::string = std::__cxx11::basic_string<char>]’ /home/wssn/catkin_ws_gpu/src/VINS-Fusion-gpu/loop_fusion/src/pose_graph.cpp:64:39: required from here /home/wssn/catkin_ws_gpu/src/VINS-Fusion-gpu/loop_fusion/src/ThirdParty/DBoW/TemplatedVocabulary.h:1529:29: warning: comparison of integer expressions of different signedness: ‘unsigned int’ and ‘int32_t’ {aka ‘int’} [-Wsign-compare] 1529 | for(unsigned int i = 0; i < voc.nNodes; ++i) | ~~^~~~~~~~~~~~ /home/wssn/catkin_ws_gpu/src/VINS-Fusion-gpu/loop_fusion/src/ThirdParty/DBoW/TemplatedVocabulary.h:1553:29: warning: comparison of integer expressions of different signedness: ‘unsigned int’ and ‘int32_t’ {aka ‘int’} [-Wsign-compare] 1553 | for(unsigned int i = 0; i < voc.nWords; ++i) | ~~^~~~~~~~~~~~ [ 72%] Linking CXX executable /home/wssn/catkin_ws_gpu/devel/lib/loop_fusion/loop_fusion_node [ 72%] Built target loop_fusion_node make[1]: *** [CMakeFiles/Makefile2:1680:VINS-Fusion-gpu/vins_estimator/CMakeFiles/vins_lib.dir/all] 错误 2 make: *** [Makefile:141:all] 错误 2 Invoking "make -j8 -l8" failed
最新发布
09-01
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值