isl-org / Open3D

Open3D: A Modern Library for 3D Data Processing
http://www.open3d.org
Other
10.82k stars 2.24k forks source link

Cannot compile on Linux 4.14.0 with VoxelBlockGridImpl.h #6841

Open wangguan1995 opened 1 week ago

wangguan1995 commented 1 week ago

Checklist

Steps to reproduce the issue

I first cloned Open3D by:

git clone https://github.com/isl-org/Open3D.git
cd Open3D

Linux 4.14.0_1-0-0-44 #1 SMP Tue Sep 14 17:12:22 CST 2021 x86_64 x86_64 x86_64 GNU/Linux

Then, I build Open3D (on Ubuntu 20.04, with CUDA 11.5) with:

mkdir build
cd build
cmake ..
make -j$(nproc)

Error message

[  1%] Built target ext_tinyobjloader
[  2%] Built target ext_poisson
[  3%] Built target ext_boringssl
[  4%] Built target ext_directxmath
[  5%] Built target ext_eigen
[  5%] Built target ShaderLinker
[  6%] Built target ext_zlib
[  6%] Built target 3rdparty_rply
[  7%] Built target ext_cppzmq
[  8%] Built target 3rdparty_tinyfiledialogs
[  8%] Built target ext_mkl
[  9%] Built target ext_filament
[ 10%] Built target ext_msgpack-c
[ 11%] Built target ext_directxheaders
[ 12%] Built target ext_tbb
[ 13%] Built target ext_turbojpeg
[ 13%] Built target 3rdparty_glew
[ 15%] Built target ext_mkl_include
[ 15%] Built target ext_imgui
[ 16%] Built target ext_webrtc
[ 17%] Built target ext_jsoncpp
[ 17%] Built target ext_civetweb
[ 18%] Built target ext_ippicv
[ 18%] Built target copy_html_dir
[ 19%] Built target ext_parallelstl
[ 20%] Built target ext_uvatlas
[ 20%] Built target ext_qhull
[ 21%] Built target ShaderEncoder
[ 21%] Built target 3rdparty_imgui
[ 23%] Built target materials
[ 24%] Built target ext_tinygltf
[ 25%] Built target ext_fmt
[ 25%] Built target ext_libpng
[ 25%] Built target ext_embree
[ 26%] Built target ext_assimp
[ 27%] Built target ext_zeromq
[ 28%] Built target ext_curl
[ 28%] Built target ext_webrtc_all
[ 29%] Built target ext_nanoflann
[ 31%] Built target shader
[ 31%] Built target ext_vtk
[ 32%] Built target 3rdparty_qhull_r
[ 33%] Built target 3rdparty_liblzf
[ 34%] Built target glfw
[ 37%] Built target 3rdparty_qhullcpp
[ 38%] Built target ml_contrib
[ 39%] Built target camera
[ 40%] Built target tpipelines
[ 41%] Built target tpipelines_kernel
[ 42%] Built target tgeometry
[ 43%] Built target webrtc_server
[ 44%] Built target pipelines
[ 49%] Built target data
[ 50%] Built target tio
[ 56%] Built target core
[ 60%] Built target geometry
[ 62%] Built target utility
[ 63%] Building CXX object cpp/open3d/t/geometry/kernel/CMakeFiles/tgeometry_kernel.dir/VoxelBlockGridCPU.cpp.o
[ 68%] Built target GUI
[ 72%] Built target io
[ 79%] Built target visualization
In file included from /workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridCPU.cpp:21:
/workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridImpl.h: In instantiation of ‘void open3d::t::geometry::kernel::voxel_grid::RayCastCPU(std::shared_ptr<open3d::core::HashMap>&, const open3d::t::geometry::TensorMap&, const open3d::core::Tensor&, open3d::t::geometry::TensorMap&, const open3d::core::Tensor&, const open3d::core::Tensor&, open3d::t::geometry::kernel::voxel_grid::index_t, open3d::t::geometry::kernel::voxel_grid::index_t, open3d::t::geometry::kernel::voxel_grid::index_t, float, float, float, float, float, float, int) [with tsdf_t = float; weight_t = short unsigned int; color_t = short unsigned int; open3d::t::geometry::kernel::voxel_grid::index_t = int]’:
/workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridCPU.cpp:231:65:   required from here
/workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridImpl.h:732:46: error: conversion from ‘solist_iterator<[...],pair<[...],[...]>>’ to non-scalar type ‘solist_iterator<[...],pair<[...],[...]>>’ requested
                 auto iter = hashmap_impl.find(key);
                             ~~~~~~~~~~~~~~~~~^~~~~
/workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridImpl.h:733:45: error: invalid initialization of reference of type ‘const tbb::interface5::internal::solist_iterator<tbb::interface5::internal::split_ordered_list<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int>, tbb::tbb_allocator<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> > >, std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> >&’ from expression of type ‘tbb::interface5::internal::concurrent_unordered_base<tbb::interface5::concurrent_unordered_map_traits<open3d::utility::MiniVec<int, 3>, unsigned int, tbb::interface5::internal::hash_compare<open3d::utility::MiniVec<int, 3>, open3d::utility::MiniVecHash<int, 3>, open3d::utility::MiniVecEq<int, 3> >, tbb::tbb_allocator<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> >, false> >::const_iterator’ {aka ‘tbb::interface5::internal::solist_iterator<tbb::interface5::internal::split_ordered_list<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int>, tbb::tbb_allocator<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> > >, const std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> >’}
                 if (iter == hashmap_impl.end()) return -1;
                             ~~~~~~~~~~~~~~~~^~
In file included from /workspace/wangguan/gino_paddle_ahmed/Open3D/build/mkl_install/include/tbb/concurrent_unordered_set.h:26,
                 from /workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridCPU.cpp:8:
/workspace/wangguan/gino_paddle_ahmed/Open3D/build/mkl_install/include/tbb/internal/_concurrent_unordered_impl.h:189:6: note: in passing argument 2 of ‘bool tbb::interface5::internal::operator==(const tbb::interface5::internal::solist_iterator<Solist, T>&, const tbb::interface5::internal::solist_iterator<Solist, U>&) [with Solist = tbb::interface5::internal::split_ordered_list<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int>, tbb::tbb_allocator<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> > >; T = std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int>; U = std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int>]’
 bool operator==( const solist_iterator<Solist,T> &i, const solist_iterator<Solist,U> &j ) {
      ^~~~~~~~
In file included from /workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridCPU.cpp:21:
/workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridImpl.h:931:46: error: conversion from ‘solist_iterator<[...],pair<[...],[...]>>’ to non-scalar type ‘solist_iterator<[...],pair<[...],[...]>>’ requested
                 auto iter = hashmap_impl.find(key);
                             ~~~~~~~~~~~~~~~~~^~~~~
/workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridImpl.h:932:45: error: invalid initialization of reference of type ‘const tbb::interface5::internal::solist_iterator<tbb::interface5::internal::split_ordered_list<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int>, tbb::tbb_allocator<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> > >, std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> >&’ from expression of type ‘tbb::interface5::internal::concurrent_unordered_base<tbb::interface5::concurrent_unordered_map_traits<open3d::utility::MiniVec<int, 3>, unsigned int, tbb::interface5::internal::hash_compare<open3d::utility::MiniVec<int, 3>, open3d::utility::MiniVecHash<int, 3>, open3d::utility::MiniVecEq<int, 3> >, tbb::tbb_allocator<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> >, false> >::const_iterator’ {aka ‘tbb::interface5::internal::solist_iterator<tbb::interface5::internal::split_ordered_list<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int>, tbb::tbb_allocator<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> > >, const std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> >’}
                 if (iter == hashmap_impl.end()) return;
                             ~~~~~~~~~~~~~~~~^~
In file included from /workspace/wangguan/gino_paddle_ahmed/Open3D/build/mkl_install/include/tbb/concurrent_unordered_set.h:26,
                 from /workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridCPU.cpp:8:
/workspace/wangguan/gino_paddle_ahmed/Open3D/build/mkl_install/include/tbb/internal/_concurrent_unordered_impl.h:189:6: note: in passing argument 2 of ‘bool tbb::interface5::internal::operator==(const tbb::interface5::internal::solist_iterator<Solist, T>&, const tbb::interface5::internal::solist_iterator<Solist, U>&) [with Solist = tbb::interface5::internal::split_ordered_list<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int>, tbb::tbb_allocator<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> > >; T = std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int>; U = std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int>]’
 bool operator==( const solist_iterator<Solist,T> &i, const solist_iterator<Solist,U> &j ) {
      ^~~~~~~~
In file included from /workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridCPU.cpp:21:
/workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridImpl.h: In instantiation of ‘void open3d::t::geometry::kernel::voxel_grid::RayCastCPU(std::shared_ptr<open3d::core::HashMap>&, const open3d::t::geometry::TensorMap&, const open3d::core::Tensor&, open3d::t::geometry::TensorMap&, const open3d::core::Tensor&, const open3d::core::Tensor&, open3d::t::geometry::kernel::voxel_grid::index_t, open3d::t::geometry::kernel::voxel_grid::index_t, open3d::t::geometry::kernel::voxel_grid::index_t, float, float, float, float, float, float, int) [with tsdf_t = float; weight_t = float; color_t = float; open3d::t::geometry::kernel::voxel_grid::index_t = int]’:
/workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridCPU.cpp:232:59:   required from here
/workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridImpl.h:732:46: error: conversion from ‘solist_iterator<[...],pair<[...],[...]>>’ to non-scalar type ‘solist_iterator<[...],pair<[...],[...]>>’ requested
                 auto iter = hashmap_impl.find(key);
                             ~~~~~~~~~~~~~~~~~^~~~~
/workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridImpl.h:733:45: error: invalid initialization of reference of type ‘const tbb::interface5::internal::solist_iterator<tbb::interface5::internal::split_ordered_list<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int>, tbb::tbb_allocator<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> > >, std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> >&’ from expression of type ‘tbb::interface5::internal::concurrent_unordered_base<tbb::interface5::concurrent_unordered_map_traits<open3d::utility::MiniVec<int, 3>, unsigned int, tbb::interface5::internal::hash_compare<open3d::utility::MiniVec<int, 3>, open3d::utility::MiniVecHash<int, 3>, open3d::utility::MiniVecEq<int, 3> >, tbb::tbb_allocator<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> >, false> >::const_iterator’ {aka ‘tbb::interface5::internal::solist_iterator<tbb::interface5::internal::split_ordered_list<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int>, tbb::tbb_allocator<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> > >, const std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> >’}
                 if (iter == hashmap_impl.end()) return -1;
                             ~~~~~~~~~~~~~~~~^~
In file included from /workspace/wangguan/gino_paddle_ahmed/Open3D/build/mkl_install/include/tbb/concurrent_unordered_set.h:26,
                 from /workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridCPU.cpp:8:
/workspace/wangguan/gino_paddle_ahmed/Open3D/build/mkl_install/include/tbb/internal/_concurrent_unordered_impl.h:189:6: note: in passing argument 2 of ‘bool tbb::interface5::internal::operator==(const tbb::interface5::internal::solist_iterator<Solist, T>&, const tbb::interface5::internal::solist_iterator<Solist, U>&) [with Solist = tbb::interface5::internal::split_ordered_list<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int>, tbb::tbb_allocator<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> > >; T = std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int>; U = std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int>]’
 bool operator==( const solist_iterator<Solist,T> &i, const solist_iterator<Solist,U> &j ) {
      ^~~~~~~~
In file included from /workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridCPU.cpp:21:
/workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridImpl.h:931:46: error: conversion from ‘solist_iterator<[...],pair<[...],[...]>>’ to non-scalar type ‘solist_iterator<[...],pair<[...],[...]>>’ requested
                 auto iter = hashmap_impl.find(key);
                             ~~~~~~~~~~~~~~~~~^~~~~
/workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridImpl.h:932:45: error: invalid initialization of reference of type ‘const tbb::interface5::internal::solist_iterator<tbb::interface5::internal::split_ordered_list<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int>, tbb::tbb_allocator<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> > >, std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> >&’ from expression of type ‘tbb::interface5::internal::concurrent_unordered_base<tbb::interface5::concurrent_unordered_map_traits<open3d::utility::MiniVec<int, 3>, unsigned int, tbb::interface5::internal::hash_compare<open3d::utility::MiniVec<int, 3>, open3d::utility::MiniVecHash<int, 3>, open3d::utility::MiniVecEq<int, 3> >, tbb::tbb_allocator<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> >, false> >::const_iterator’ {aka ‘tbb::interface5::internal::solist_iterator<tbb::interface5::internal::split_ordered_list<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int>, tbb::tbb_allocator<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> > >, const std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> >’}
                 if (iter == hashmap_impl.end()) return;
                             ~~~~~~~~~~~~~~~~^~
In file included from /workspace/wangguan/gino_paddle_ahmed/Open3D/build/mkl_install/include/tbb/concurrent_unordered_set.h:26,
                 from /workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridCPU.cpp:8:
/workspace/wangguan/gino_paddle_ahmed/Open3D/build/mkl_install/include/tbb/internal/_concurrent_unordered_impl.h:189:6: note: in passing argument 2 of ‘bool tbb::interface5::internal::operator==(const tbb::interface5::internal::solist_iterator<Solist, T>&, const tbb::interface5::internal::solist_iterator<Solist, U>&) [with Solist = tbb::interface5::internal::split_ordered_list<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int>, tbb::tbb_allocator<std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int> > >; T = std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int>; U = std::pair<const open3d::utility::MiniVec<int, 3>, unsigned int>]’
 bool operator==( const solist_iterator<Solist,T> &i, const solist_iterator<Solist,U> &j ) {
      ^~~~~~~~
In file included from /workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/t/geometry/kernel/VoxelBlockGridCPU.cpp:13:
/workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/core/ParallelFor.h:103:6: error: ‘void open3d::core::ParallelFor(const open3d::core::Device&, int64_t, const func_t&) [with func_t = open3d::t::geometry::kernel::voxel_grid::RayCastCPU(std::shared_ptr<open3d::core::HashMap>&, const open3d::t::geometry::TensorMap&, const open3d::core::Tensor&, open3d::t::geometry::TensorMap&, const open3d::core::Tensor&, const open3d::core::Tensor&, open3d::t::geometry::kernel::voxel_grid::index_t, open3d::t::geometry::kernel::voxel_grid::index_t, open3d::t::geometry::kernel::voxel_grid::index_t, float, float, float, float, float, float, int) [with tsdf_t = float; weight_t = short unsigned int; color_t = short unsigned int; open3d::t::geometry::kernel::voxel_grid::index_t = int]::<lambda(open3d::t::geometry::kernel::voxel_grid::index_t)>; int64_t = long int]’, declared using local type ‘const open3d::t::geometry::kernel::voxel_grid::RayCastCPU(std::shared_ptr<open3d::core::HashMap>&, const open3d::t::geometry::TensorMap&, const open3d::core::Tensor&, open3d::t::geometry::TensorMap&, const open3d::core::Tensor&, const open3d::core::Tensor&, open3d::t::geometry::kernel::voxel_grid::index_t, open3d::t::geometry::kernel::voxel_grid::index_t, open3d::t::geometry::kernel::voxel_grid::index_t, float, float, float, float, float, float, int) [with tsdf_t = float; weight_t = short unsigned int; color_t = short unsigned int; open3d::t::geometry::kernel::voxel_grid::index_t = int]::<lambda(open3d::t::geometry::kernel::voxel_grid::index_t)>’, is used but never defined [-fpermissive]
 void ParallelFor(const Device& device, int64_t n, const func_t& func) {
      ^~~~~~~~~~~
/workspace/wangguan/gino_paddle_ahmed/Open3D/cpp/open3d/core/ParallelFor.h:103:6: error: ‘void open3d::core::ParallelFor(const open3d::core::Device&, int64_t, const func_t&) [with func_t = open3d::t::geometry::kernel::voxel_grid::RayCastCPU(std::shared_ptr<open3d::core::HashMap>&, const open3d::t::geometry::TensorMap&, const open3d::core::Tensor&, open3d::t::geometry::TensorMap&, const open3d::core::Tensor&, const open3d::core::Tensor&, open3d::t::geometry::kernel::voxel_grid::index_t, open3d::t::geometry::kernel::voxel_grid::index_t, open3d::t::geometry::kernel::voxel_grid::index_t, float, float, float, float, float, float, int) [with tsdf_t = float; weight_t = float; color_t = float; open3d::t::geometry::kernel::voxel_grid::index_t = int]::<lambda(open3d::t::geometry::kernel::voxel_grid::index_t)>; int64_t = long int]’, declared using local type ‘const open3d::t::geometry::kernel::voxel_grid::RayCastCPU(std::shared_ptr<open3d::core::HashMap>&, const open3d::t::geometry::TensorMap&, const open3d::core::Tensor&, open3d::t::geometry::TensorMap&, const open3d::core::Tensor&, const open3d::core::Tensor&, open3d::t::geometry::kernel::voxel_grid::index_t, open3d::t::geometry::kernel::voxel_grid::index_t, open3d::t::geometry::kernel::voxel_grid::index_t, float, float, float, float, float, float, int) [with tsdf_t = float; weight_t = float; color_t = float; open3d::t::geometry::kernel::voxel_grid::index_t = int]::<lambda(open3d::t::geometry::kernel::voxel_grid::index_t)>’, is used but never defined [-fpermissive]
cpp/open3d/t/geometry/kernel/CMakeFiles/tgeometry_kernel.dir/build.make:229: recipe for target 'cpp/open3d/t/geometry/kernel/CMakeFiles/tgeometry_kernel.dir/VoxelBlockGridCPU.cpp.o' failed
make[2]: *** [cpp/open3d/t/geometry/kernel/CMakeFiles/tgeometry_kernel.dir/VoxelBlockGridCPU.cpp.o] Error 1
CMakeFiles/Makefile2:2769: recipe for target 'cpp/open3d/t/geometry/kernel/CMakeFiles/tgeometry_kernel.dir/all' failed
make[1]: *** [cpp/open3d/t/geometry/kernel/CMakeFiles/tgeometry_kernel.dir/all] Error 2
Makefile:155: recipe for target 'all' failed
make: *** [all] Error 2

### Open3D, Python and System information

```markdown
- Operating system: Linux
- Python version: Python 3.9
- Open3D version: output from python: 0.17
- System architecture: x86 / arm64 / apple-silicon / jetson / rpi
- Is this a remote workstation?: yes
- How did you install Open3D?:build from source
- Compiler version (if built from source): gcc version 8.2.0 (GCC)

Additional information

No response

idhamari commented 5 days ago

I am using Ubuntu 24.04

Here is how I solved the issue:

I downloaded and built assimp from the source then in Open3D changed the cmake option USE_SYSTEM_ASSIMP to True.