PointCloudLibrary / pcl

Point Cloud Library (PCL)
https://pointclouds.org/
Other
9.89k stars 4.61k forks source link

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

Closed jiapei100 closed 1 month ago

jiapei100 commented 6 months ago

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):

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

larshg commented 6 months ago

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.

larshg commented 6 months ago

See #5959