PointCloudLibrary / pcl

Point Cloud Library (PCL)

Home Page:https://pointclouds.org/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

error: ‘variate_generator’ is not a member of ‘std’

jiapei100 opened this issue · comments

Describe the error

[ 55%] Built target pcl_tracking
make  -f recognition/CMakeFiles/pcl_recognition.dir/build.make recognition/CMakeFiles/pcl_recognition.dir/depend
make[2]: Entering directory '....../pcl/build'
cd ....../pcl/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" ....../pcl ....../pcl/recognition ....../pcl/build ....../pcl/build/recognition ....../pcl/build/recognition/CMakeFiles/pcl_recognition.dir/DependInfo.cmake "--color="
make[2]: Leaving directory '....../pcl/build'
make  -f recognition/CMakeFiles/pcl_recognition.dir/build.make recognition/CMakeFiles/pcl_recognition.dir/build
make[2]: Entering directory '....../pcl/build'
cd ....../pcl/build/recognition && ....../pcl/cmake/custom_output.sh /usr/bin/c++ -DBOOST_ATOMIC_DYN_LINK -DBOOST_ATOMIC_NO_LIB -DBOOST_FILESYSTEM_DYN_LINK -DBOOST_FILESYSTEM_NO_LIB -DBOOST_IOSTREAMS_DYN_LINK -DBOOST_IOSTREAMS_NO_LIB -DELPP_NO_DEFAULT_LOG_FILE -DPCLAPI_EXPORTS -I....../pcl/build/include -I....../pcl/common/include -I....../pcl/io/include -I....../pcl/search/include -I....../pcl/kdtree/include -I....../pcl/octree/include -I....../pcl/features/include -I....../pcl/filters/include -I....../pcl/registration/include -I....../pcl/sample_consensus/include -I....../pcl/ml/include -I....../pcl/recognition/include -isystem /usr/local/include/metslib-0.5 -isystem /usr/local/lib/metslib-0.5/include -isystem /usr/include/eigen3 -Wabi=11 -Wall -Wextra -fno-strict-aliasing -msse4.2 -mfpmath=sse -march=native -mavx2 -fopenmp -O2 -g -DNDEBUG -std=c++14 -fPIC -fopenmp -MD -MT recognition/CMakeFiles/pcl_recognition.dir/src/hv/hv_go.cpp.o -MF CMakeFiles/pcl_recognition.dir/src/hv/hv_go.cpp.o.d -o CMakeFiles/pcl_recognition.dir/src/hv/hv_go.cpp.o -c ....../pcl/recognition/src/hv/hv_go.cpp
In file included from /usr/local/include/metslib-0.5/metslib/mets.hh:129,
                 from ....../pcl/recognition/include/pcl/recognition/hv/hv_go.h:24,
                 from ....../pcl/recognition/include/pcl/recognition/impl/hv/hv_go.hpp:40,
                 from ....../pcl/recognition/src/hv/hv_go.cpp:37:
/usr/local/include/metslib-0.5/metslib/model.hh: In function ‘void mets::random_shuffle(permutation_problem&, random_generator&)’:
/usr/local/include/metslib-0.5/metslib/model.hh:249:10: error: ‘variate_generator’ is not a member of ‘std’
  249 |     std::variate_generator<random_generator&,
      |          ^~~~~~~~~~~~~~~~~
/usr/local/include/metslib-0.5/metslib/model.hh:249:10: note: suggested alternatives:
In file included from ....../pcl/recognition/include/pcl/recognition/hv/hv_go.h:18:
/usr/include/boost/random/variate_generator.hpp:51:7: note:   ‘boost::random::variate_generator’
   51 | class variate_generator
      |       ^~~~~~~~~~~~~~~~~
/usr/include/boost/random/variate_generator.hpp:51:7: note:   ‘boost::random::variate_generator’
/usr/local/include/metslib-0.5/metslib/model.hh:249:44: error: expected primary-expression before ‘&’ token
  249 |     std::variate_generator<random_generator&,
      |                                            ^
/usr/local/include/metslib-0.5/metslib/model.hh:249:45: error: expected primary-expression before ‘,’ token
  249 |     std::variate_generator<random_generator&,
      |                                             ^
/usr/local/include/metslib-0.5/metslib/model.hh:250:45: error: expected primary-expression before ‘>’ token
  250 |       std::uniform_int_distribution<size_t> >gen(rng, unigen);
      |                                             ^
/usr/local/include/metslib-0.5/metslib/model.hh:256:55: error: ‘gen’ was not declared in this scope; did you mean ‘get’?
  256 |     std::random_shuffle(p.pi_m.begin(), p.pi_m.end(), gen);
      |                                                       ^~~
      |                                                       get
In file included from /usr/local/include/metslib-0.5/metslib/mets.hh:134:
/usr/local/include/metslib-0.5/metslib/simulated-annealing.hh: At global scope:
/usr/local/include/metslib-0.5/metslib/simulated-annealing.hh:137:10: error: ‘uniform_real’ in namespace ‘std’ does not name a template type
  137 |     std::uniform_real<double> ureal;
      |          ^~~~~~~~~~~~
/usr/local/include/metslib-0.5/metslib/simulated-annealing.hh:139:10: error: ‘variate_generator’ in namespace ‘std’ does not name a template type
  139 |     std::variate_generator< std::mt19937, std::uniform_real<double> > gen;
      |          ^~~~~~~~~~~~~~~~~
/usr/local/include/metslib-0.5/metslib/simulated-annealing.hh: In constructor ‘mets::simulated_annealing<move_manager_type>::simulated_annealing(mets::evaluable_solution&, mets::solution_recorder&, move_manager_t&, mets::termination_criteria_chain&, mets::abstract_cooling_schedule&, double, double, double)’:
/usr/local/include/metslib-0.5/metslib/simulated-annealing.hh:195:5: error: class ‘mets::simulated_annealing<move_manager_type>’ does not have any field named ‘ureal’
  195 |     ureal(0.0,1.0), rng(), gen(rng, ureal)
      |     ^~~~~
/usr/local/include/metslib-0.5/metslib/simulated-annealing.hh:195:28: error: class ‘mets::simulated_annealing<move_manager_type>’ does not have any field named ‘gen’
  195 |     ureal(0.0,1.0), rng(), gen(rng, ureal)
      |                            ^~~
/usr/local/include/metslib-0.5/metslib/simulated-annealing.hh:195:37: error: ‘ureal’ was not declared in this scope
  195 |     ureal(0.0,1.0), rng(), gen(rng, ureal)
      |                                     ^~~~~
/usr/local/include/metslib-0.5/metslib/simulated-annealing.hh: In member function ‘virtual void mets::simulated_annealing<move_manager_type>::search()’:
/usr/local/include/metslib-0.5/metslib/simulated-annealing.hh:225:27: error: there are no arguments to ‘gen’ that depend on a template parameter, so a declaration of ‘gen’ must be available [-fpermissive]
  225 |           if(delta < 0 || gen() < exp(-delta/(K_m*current_temp_m)))
      |                           ^~~
/usr/local/include/metslib-0.5/metslib/simulated-annealing.hh:225:27: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
....../pcl/recognition/include/pcl/recognition/impl/hv/hv_go.hpp: In instantiation of ‘void pcl::GlobalHypothesesVerification<ModelT, SceneT>::SAOptimize(std::vector<int, std::allocator<int> >&, std::vector<bool>&) [with ModelT = pcl::PointXYZ; SceneT = pcl::PointXYZ]’:
....../pcl/recognition/src/hv/hv_go.cpp:42:1:   required from here
....../pcl/recognition/include/pcl/recognition/impl/hv/hv_go.hpp:456:6: error: ‘class mets::simulated_annealing<pcl::GlobalHypothesesVerification<pcl::PointXYZ, pcl::PointXYZ>::move_manager>’ has no member named ‘setApplyAndEvaluate’
  456 |   sa.setApplyAndEvaluate(true);
      |   ~~~^~~~~~~~~~~~~~~~~~~
....../pcl/recognition/include/pcl/recognition/impl/hv/hv_go.hpp: In instantiation of ‘void pcl::GlobalHypothesesVerification<ModelT, SceneT>::SAOptimize(std::vector<int, std::allocator<int> >&, std::vector<bool>&) [with ModelT = pcl::PointXYZRGB; SceneT = pcl::PointXYZRGB]’:
....../pcl/recognition/src/hv/hv_go.cpp:43:1:   required from here
....../pcl/recognition/include/pcl/recognition/impl/hv/hv_go.hpp:456:6: error: ‘class mets::simulated_annealing<pcl::GlobalHypothesesVerification<pcl::PointXYZRGB, pcl::PointXYZRGB>::move_manager>’ has no member named ‘setApplyAndEvaluate’
....../pcl/recognition/include/pcl/recognition/impl/hv/hv_go.hpp: In instantiation of ‘void pcl::GlobalHypothesesVerification<ModelT, SceneT>::SAOptimize(std::vector<int, std::allocator<int> >&, std::vector<bool>&) [with ModelT = pcl::PointXYZRGBA; SceneT = pcl::PointXYZRGBA]’:
....../pcl/recognition/src/hv/hv_go.cpp:44:1:   required from here
....../pcl/recognition/include/pcl/recognition/impl/hv/hv_go.hpp:456:6: error: ‘class mets::simulated_annealing<pcl::GlobalHypothesesVerification<pcl::PointXYZRGBA, pcl::PointXYZRGBA>::move_manager>’ has no member named ‘setApplyAndEvaluate’
 *** Built object hv_go.cpp.o from ....../pcl/recognition/src/hv/hv_go.cpp in 7802 ms.
cd ....../pcl/build/recognition && /usr/bin/cmake -E cmake_link_script CMakeFiles/pcl_recognition.dir/link.txt --verbose=1
/usr/bin/c++ -fPIC  -Wabi=11 -Wall -Wextra -fno-strict-aliasing -msse4.2 -mfpmath=sse -march=native -mavx2 -fopenmp -O2 -g -DNDEBUG -Wl,--as-needed -shared -Wl,-soname,libpcl_recognition.so.1.14 -o ../lib/libpcl_recognition.so.1.14.0.99 CMakeFiles/pcl_recognition.dir/src/linemod.cpp.o CMakeFiles/pcl_recognition.dir/src/quantizable_modality.cpp.o CMakeFiles/pcl_recognition.dir/src/dotmod.cpp.o CMakeFiles/pcl_recognition.dir/src/mask_map.cpp.o CMakeFiles/pcl_recognition.dir/src/hv/occlusion_reasoning.cpp.o CMakeFiles/pcl_recognition.dir/src/hv/hv_papazov.cpp.o CMakeFiles/pcl_recognition.dir/src/hv/hv_go.cpp.o CMakeFiles/pcl_recognition.dir/src/hv/greedy_verification.cpp.o CMakeFiles/pcl_recognition.dir/src/cg/hough_3d.cpp.o CMakeFiles/pcl_recognition.dir/src/cg/geometric_consistency.cpp.o CMakeFiles/pcl_recognition.dir/src/ransac_based/obj_rec_ransac.cpp.o CMakeFiles/pcl_recognition.dir/src/ransac_based/model_library.cpp.o CMakeFiles/pcl_recognition.dir/src/ransac_based/orr_octree.cpp.o CMakeFiles/pcl_recognition.dir/src/ransac_based/orr_octree_zprojection.cpp.o CMakeFiles/pcl_recognition.dir/src/face_detection/face_detector_data_provider.cpp.o CMakeFiles/pcl_recognition.dir/src/face_detection/rf_face_detector_trainer.cpp.o CMakeFiles/pcl_recognition.dir/src/implicit_shape_model.cpp.o  -Wl,-rpath,....../pcl/build/lib:/usr/local/lib: -lm -latomic ../lib/libpcl_registration.so.1.14.0.99 ../lib/libpcl_ml.so.1.14.0.99 ../lib/libpcl_io.so.1.14.0.99 ../lib/libpcl_features.so.1.14.0.99 ../lib/libpcl_filters.so.1.14.0.99 ../lib/libpcl_search.so.1.14.0.99 ../lib/libpcl_kdtree.so.1.14.0.99 ../lib/libpcl_octree.so.1.14.0.99 /usr/local/lib/libflann_cpp.so.1.9.2 /usr/lib/x86_64-linux-gnu/liblz4.so ../lib/libpcl_sample_consensus.so.1.14.0.99 /usr/lib/libboost_iostreams.so.1.84.0 ../lib/libpcl_io_ply.so.1.14.0.99 ../lib/libpcl_common.so.1.14.0.99 /usr/lib/gcc/x86_64-linux-gnu/12/libgomp.so /usr/lib/x86_64-linux-gnu/libpthread.a -lm -latomic /usr/lib/libboost_filesystem.so.1.84.0 /usr/lib/libboost_atomic.so.1.84.0 /usr/lib/x86_64-linux-gnu/libpng.so /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/x86_64-linux-gnu/libusb-1.0.so /usr/local/lib/librealsense2.so.2.54.2 /usr/local/lib/librsutils.a /usr/lib/x86_64-linux-gnu/libpcap.so 
/usr/bin/ld: cannot find CMakeFiles/pcl_recognition.dir/src/hv/hv_go.cpp.o: No such file or directory
collect2: error: ld returned 1 exit status
make[2]: *** [recognition/CMakeFiles/pcl_recognition.dir/build.make:359: lib/libpcl_recognition.so.1.14.0.99] Error 1
make[2]: Leaving directory '....../pcl/build'
make[1]: *** [CMakeFiles/Makefile2:1610: recognition/CMakeFiles/pcl_recognition.dir/all] Error 2
make[1]: Leaving directory '....../pcl/build'
make: *** [Makefile:159: all] Error 2

To Reproduce

It looks it has something to do with metslib . Even with metslib newest release, it's still buggy.

It's absolutely related to METSLIB_HAVE_UNORDERED_MAP.

Your Environment (please complete the following information):

  • OS: Ubuntu 22.04
  • Compiler:
~ gcc --version
gcc (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  • PCL Version : 1.14.0
  • PCL Type: Compiled from source

If PCL was compiled from source or failure in compiling PCL itself:

  • GPU, Kinfu, CUDA enabled? GPU/CUDA enabled, but Kinfu NO.
  • This ERROR clearly relates to BUILD_recognition.

Pcl doesnt support system metslib properly. So the easiest option is to remove it and use the bundled version, which are updated to use boost versions of the random generators.