isciences / exactextract

Fast and accurate raster zonal statistics
Apache License 2.0
233 stars 31 forks source link

Compilation failure with gcc 9 #82

Closed weiqi-tori closed 4 months ago

weiqi-tori commented 4 months ago

Hi, I'm trying to install the package with pip install . from the root of the repository, but failed on building project with ninja. Any idea on how could I fix that? Thanks.

Processing /home/weiqi_tori/GitHub/exactextract
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Installing backend dependencies ... done
  Preparing metadata (pyproject.toml) ... done
Building wheels for collected packages: exactextract
  Building wheel for exactextract (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for exactextract (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [85 lines of output]
      *** scikit-build-core 0.8.1 using CMake 3.28.3 (wheel)
      *** Configuring CMake...
      2024-02-21 13:58:10,953 - scikit_build_core - WARNING - libdir/ldlibrary: /home/weiqi_tori/anaconda3/envs/fenv/lib/libpython3.10.a is not a real file!
      2024-02-21 13:58:10,953 - scikit_build_core - WARNING - Can't find a Python library, got libdir=/home/weiqi_tori/anaconda3/envs/fenv/lib, ldlibrary=libpython3.10.a, multiarch=x86_64-linux-gnu, masd=None
      loading initial cache file /tmp/tmpf6fty2yo/build/CMakeInit.txt
      -- The C compiler identification is GNU 9.4.0
      -- The CXX compiler identification is GNU 9.4.0
      -- Detecting C compiler ABI info
      -- Detecting C compiler ABI info - done
      -- Check for working C compiler: /usr/bin/cc - skipped
      -- Detecting C compile features
      -- Detecting C compile features - done
      -- Detecting CXX compiler ABI info
      -- Detecting CXX compiler ABI info - done
      -- Check for working CXX compiler: /usr/bin/c++ - skipped
      -- Detecting CXX compile features
      -- Detecting CXX compile features - done
      -- GEOS version: 3.12.1
      -- Source version: 0.2.0-dev (fe1aaae)
      CMake Warning (dev) at /home/weiqi_tori/anaconda3/envs/fenv/lib/python3.10/site-packages/pybind11/share/cmake/pybind11/FindPythonLibsNew.cmake:98 (find_package):
        Policy CMP0148 is not set: The FindPythonInterp and FindPythonLibs modules
        are removed.  Run "cmake --help-policy CMP0148" for policy details.  Use
        the cmake_policy command to set the policy and suppress this warning.

      Call Stack (most recent call first):
        /home/weiqi_tori/anaconda3/envs/fenv/lib/python3.10/site-packages/pybind11/share/cmake/pybind11/pybind11Tools.cmake:50 (find_package)
        /home/weiqi_tori/anaconda3/envs/fenv/lib/python3.10/site-packages/pybind11/share/cmake/pybind11/pybind11Common.cmake:188 (include)
        /home/weiqi_tori/anaconda3/envs/fenv/lib/python3.10/site-packages/pybind11/share/cmake/pybind11/pybind11Config.cmake:250 (include)
        python/CMakeLists.txt:2 (find_package)
      This warning is for project developers.  Use -Wno-dev to suppress it.

      -- Found PythonLibs: /home/weiqi_tori/anaconda3/envs/fenv/lib/libpython3.10.so
      -- Performing Test HAS_FLTO
      -- Performing Test HAS_FLTO - Success
      -- Configuring done (2.5s)
      -- Generating done (0.0s)
      -- Build files have been written to: /tmp/tmpf6fty2yo/build
      *** Building project with Ninja...
      [1/29] Building CXX object CMakeFiles/exactextract.dir/src/box.cpp.o
      [2/29] Building CXX object CMakeFiles/exactextract.dir/src/coordinate.cpp.o
      [3/29] Building CXX object CMakeFiles/exactextract.dir/src/measures.cpp.o
      [4/29] Building CXX object CMakeFiles/exactextract.dir/src/feature.cpp.o
      [5/29] Building CXX object CMakeFiles/exactextract.dir/src/cell.cpp.o
      [6/29] Building CXX object CMakeFiles/exactextract.dir/src/grid.cpp.o
      [7/29] Building CXX object CMakeFiles/exactextract.dir/src/perimeter_distance.cpp.o
      [8/29] Building CXX object CMakeFiles/exactextract.dir/src/geos_utils.cpp.o
      [9/29] Building CXX object CMakeFiles/exactextract.dir/src/floodfill.cpp.o
      [10/29] Building CXX object CMakeFiles/exactextract.dir/src/side.cpp.o
      [11/29] Building CXX object CMakeFiles/exactextract.dir/src/traversal.cpp.o
      [12/29] Building CXX object CMakeFiles/exactextract.dir/src/feature_sequential_processor.cpp.o
      [13/29] Building CXX object CMakeFiles/exactextract.dir/src/traversal_areas.cpp.o
      [14/29] Building CXX object CMakeFiles/exactextract.dir/src/raster_cell_intersection.cpp.o
      [15/29] Building CXX object CMakeFiles/exactextract.dir/src/output_writer.cpp.o
      [16/29] Building CXX object CMakeFiles/exactextract.dir/src/weighted_quantiles.cpp.o
      [17/29] Building CXX object CMakeFiles/exactextract.dir/src/operation.cpp.o
      FAILED: CMakeFiles/exactextract.dir/src/operation.cpp.o
      /usr/bin/c++ -DGEOS_USE_ONLY_R_API -isystem /home/weiqi_tori/anaconda3/envs/fenv/include/geos -isystem /home/weiqi_tori/anaconda3/envs/fenv/include -O3 -DNDEBUG -std=c++17 -fPIC -Werror -Wall -Wextra -Wshadow -Wdouble-promotion -MD -MT CMakeFiles/exactextract.dir/src/operation.cpp.o -MF CMakeFiles/exactextract.dir/src/operation.cpp.o.d -o CMakeFiles/exactextract.dir/src/operation.cpp.o -c /home/weiqi_tori/GitHub/exactextract/src/operation.cpp
      /home/weiqi_tori/GitHub/exactextract/src/operation.cpp: In instantiation of ‘exactextract::OperationImpl<Derived>::result_type() const [with Derived = exactextract::Quantile]::<lambda(const auto:29&)> [with auto:29 = std::unique_ptr<exactextract::AbstractRaster<float> >]’:
      /usr/include/c++/9/bits/invoke.h:60:36:   required from ‘constexpr _Res std::__invoke_impl(std::__invoke_other, _Fn&&, _Args&& ...) [with _Res = exactextract::Feature::ValueType; _Fn = exactextract::OperationImpl<Derived>::result_type() const [with Derived = exactextract::Quantile]::<lambda(const auto:29&)>; _Args = {const std::unique_ptr<exactextract::AbstractRaster<float>, std::default_delete<exactextract::AbstractRaster<float> > >&}]’
      /usr/include/c++/9/bits/invoke.h:95:40:   required from ‘constexpr typename std::__invoke_result<_Functor, _ArgTypes>::type std::__invoke(_Callable&&, _Args&& ...) [with _Callable = exactextract::OperationImpl<Derived>::result_type() const [with Derived = exactextract::Quantile]::<lambda(const auto:29&)>; _Args = {const std::unique_ptr<exactextract::AbstractRaster<float>, std::default_delete<exactextract::AbstractRaster<float> > >&}; typename std::__invoke_result<_Functor, _ArgTypes>::type = exactextract::Feature::ValueType]’
      /usr/include/c++/9/variant:981:24:   required from ‘static constexpr decltype(auto) std::__detail::__variant::__gen_vtable_impl<__same_return_types, std::__detail::__variant::_Multi_array<_Result_type (*)(_Visitor, _Variants ...)>, std::tuple<_Variants ...>, std::integer_sequence<long unsigned int, __indices ...> >::__visit_invoke_impl(_Visitor&&, _Variants ...) [with bool __same_return_types = true; _Result_type = exactextract::Feature::ValueType; _Visitor = exactextract::OperationImpl<Derived>::result_type() const [with Derived = exactextract::Quantile]::<lambda(const auto:29&)>&&; _Variants = {const std::variant<std::unique_ptr<exactextract::AbstractRaster<float>, std::default_delete<exactextract::AbstractRaster<float> > >, std::unique_ptr<exactextract::AbstractRaster<double>, std::default_delete<exactextract::AbstractRaster<double> > >, std::unique_ptr<exactextract::AbstractRaster<signed char>, std::default_delete<exactextract::AbstractRaster<signed char> > >, std::unique_ptr<exactextract::AbstractRaster<short int>, std::default_delete<exactextract::AbstractRaster<short int> > >, std::unique_ptr<exactextract::AbstractRaster<int>, std::default_delete<exactextract::AbstractRaster<int> > >, std::unique_ptr<exactextract::AbstractRaster<long int>, std::default_delete<exactextract::AbstractRaster<long int> > > >&}; long unsigned int ...__indices = {0}]’
      /usr/include/c++/9/variant:989:28:   required from ‘static constexpr decltype(auto) std::__detail::__variant::__gen_vtable_impl<__same_return_types, std::__detail::__variant::_Multi_array<_Result_type (*)(_Visitor, _Variants ...)>, std::tuple<_Variants ...>, std::integer_sequence<long unsigned int, __indices ...> >::__do_visit_invoke(_Visitor&&, _Variants ...) [with bool __same_return_types = true; _Result_type = exactextract::Feature::ValueType; _Visitor = exactextract::OperationImpl<Derived>::result_type() const [with Derived = exactextract::Quantile]::<lambda(const auto:29&)>&&; _Variants = {const std::variant<std::unique_ptr<exactextract::AbstractRaster<float>, std::default_delete<exactextract::AbstractRaster<float> > >, std::unique_ptr<exactextract::AbstractRaster<double>, std::default_delete<exactextract::AbstractRaster<double> > >, std::unique_ptr<exactextract::AbstractRaster<signed char>, std::default_delete<exactextract::AbstractRaster<signed char> > >, std::unique_ptr<exactextract::AbstractRaster<short int>, std::default_delete<exactextract::AbstractRaster<short int> > >, std::unique_ptr<exactextract::AbstractRaster<int>, std::default_delete<exactextract::AbstractRaster<int> > >, std::unique_ptr<exactextract::AbstractRaster<long int>, std::default_delete<exactextract::AbstractRaster<long int> > > >&}; long unsigned int ...__indices = {0}]’
      /usr/include/c++/9/variant:1005:28:   [ skipping 2 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
      /usr/include/c++/9/variant:936:56:   required from ‘static constexpr void std::__detail::__variant::__gen_vtable_impl<__same_return_types, std::__detail::__variant::_Multi_array<_Result_type (*)(_Visitor, _Variants ...), __dimensions ...>, std::tuple<_Variants ...>, std::integer_sequence<long unsigned int, __indices ...> >::_S_apply_single_alt(_Tp&, _Tp*) [with bool __do_cookie = false; long unsigned int __index = 0; _Tp = std::__detail::__variant::_Multi_array<exactextract::Feature::ValueType (*)(exactextract::OperationImpl<Derived>::result_type() const [with Derived = exactextract::Quantile]::<lambda(const auto:29&)>&&, const std::variant<std::unique_ptr<exactextract::AbstractRaster<float>, std::default_delete<exactextract::AbstractRaster<float> > >, std::unique_ptr<exactextract::AbstractRaster<double>, std::default_delete<exactextract::AbstractRaster<double> > >, std::unique_ptr<exactextract::AbstractRaster<signed char>, std::default_delete<exactextract::AbstractRaster<signed char> > >, std::unique_ptr<exactextract::AbstractRaster<short int>, std::default_delete<exactextract::AbstractRaster<short int> > >, std::unique_ptr<exactextract::AbstractRaster<int>, std::default_delete<exactextract::AbstractRaster<int> > >, std::unique_ptr<exactextract::AbstractRaster<long int>, std::default_delete<exactextract::AbstractRaster<long int> > > >&)>; bool __same_return_types = true; _Result_type = exactextract::Feature::ValueType; _Visitor = exactextract::OperationImpl<Derived>::result_type() const [with Derived = exactextract::Quantile]::<lambda(const auto:29&)>&&; long unsigned int ...__dimensions = {6}; _Variants = {const std::variant<std::unique_ptr<exactextract::AbstractRaster<float>, std::default_delete<exactextract::AbstractRaster<float> > >, std::unique_ptr<exactextract::AbstractRaster<double>, std::default_delete<exactextract::AbstractRaster<double> > >, std::unique_ptr<exactextract::AbstractRaster<signed char>, std::default_delete<exactextract::AbstractRaster<signed char> > >, std::unique_ptr<exactextract::AbstractRaster<short int>, std::default_delete<exactextract::AbstractRaster<short int> > >, std::unique_ptr<exactextract::AbstractRaster<int>, std::default_delete<exactextract::AbstractRaster<int> > >, std::unique_ptr<exactextract::AbstractRaster<long int>, std::default_delete<exactextract::AbstractRaster<long int> > > >&}; long unsigned int ...__indices = {}]’
      /usr/include/c++/9/variant:909:48:   required from ‘constexpr const _Array_type std::__detail::__variant::__gen_vtable<true, exactextract::Feature::ValueType, exactextract::OperationImpl<Derived>::result_type() const [with Derived = exactextract::Quantile]::<lambda(const auto:29&)>&&, const std::variant<std::unique_ptr<exactextract::AbstractRaster<float>, std::default_delete<exactextract::AbstractRaster<float> > >, std::unique_ptr<exactextract::AbstractRaster<double>, std::default_delete<exactextract::AbstractRaster<double> > >, std::unique_ptr<exactextract::AbstractRaster<signed char>, std::default_delete<exactextract::AbstractRaster<signed char> > >, std::unique_ptr<exactextract::AbstractRaster<short int>, std::default_delete<exactextract::AbstractRaster<short int> > >, std::unique_ptr<exactextract::AbstractRaster<int>, std::default_delete<exactextract::AbstractRaster<int> > >, std::unique_ptr<exactextract::AbstractRaster<long int>, std::default_delete<exactextract::AbstractRaster<long int> > > >&>::_S_vtable’
      /usr/include/c++/9/variant:1647:23:   required from ‘constexpr decltype(auto) std::__do_visit(_Visitor&&, _Variants&& ...) [with bool __use_index = false; bool __same_return_types = true; _Visitor = exactextract::OperationImpl<Derived>::result_type() const [with Derived = exactextract::Quantile]::<lambda(const auto:29&)>; _Variants = {const std::variant<std::unique_ptr<exactextract::AbstractRaster<float>, std::default_delete<exactextract::AbstractRaster<float> > >, std::unique_ptr<exactextract::AbstractRaster<double>, std::default_delete<exactextract::AbstractRaster<double> > >, std::unique_ptr<exactextract::AbstractRaster<signed char>, std::default_delete<exactextract::AbstractRaster<signed char> > >, std::unique_ptr<exactextract::AbstractRaster<short int>, std::default_delete<exactextract::AbstractRaster<short int> > >, std::unique_ptr<exactextract::AbstractRaster<int>, std::default_delete<exactextract::AbstractRaster<int> > >, std::unique_ptr<exactextract::AbstractRaster<long int>, std::default_delete<exactextract::AbstractRaster<long int> > > >&}]’
      /usr/include/c++/9/variant:1663:24:   required from ‘constexpr decltype(auto) std::visit(_Visitor&&, _Variants&& ...) [with _Visitor = exactextract::OperationImpl<Derived>::result_type() const [with Derived = exactextract::Quantile]::<lambda(const auto:29&)>; _Variants = {const std::variant<std::unique_ptr<exactextract::AbstractRaster<float>, std::default_delete<exactextract::AbstractRaster<float> > >, std::unique_ptr<exactextract::AbstractRaster<double>, std::default_delete<exactextract::AbstractRaster<double> > >, std::unique_ptr<exactextract::AbstractRaster<signed char>, std::default_delete<exactextract::AbstractRaster<signed char> > >, std::unique_ptr<exactextract::AbstractRaster<short int>, std::default_delete<exactextract::AbstractRaster<short int> > >, std::unique_ptr<exactextract::AbstractRaster<int>, std::default_delete<exactextract::AbstractRaster<int> > >, std::unique_ptr<exactextract::AbstractRaster<long int>, std::default_delete<exactextract::AbstractRaster<long int> > > >&}]’
      /home/weiqi_tori/GitHub/exactextract/src/operation.cpp:122:26:   required from ‘exactextract::Feature::ValueType exactextract::OperationImpl<Derived>::result_type() const [with Derived = exactextract::Quantile]’
      /home/weiqi_tori/GitHub/exactextract/src/operation.cpp:118:24:   required from here
      /usr/include/c++/9/variant:1028:40:   in ‘constexpr’ expansion of ‘std::__detail::__variant::__gen_vtable_impl<true, std::__detail::__variant::_Multi_array<exactextract::Feature::ValueType (*)(exactextract::OperationImpl<Derived>::result_type() const [with Derived = exactextract::Quantile]::<lambda(const auto:29&)>&&, const std::variant<std::unique_ptr<exactextract::AbstractRaster<float>, std::default_delete<exactextract::AbstractRaster<float> > >, std::unique_ptr<exactextract::AbstractRaster<double>, std::default_delete<exactextract::AbstractRaster<double> > >, std::unique_ptr<exactextract::AbstractRaster<signed char>, std::default_delete<exactextract::AbstractRaster<signed char> > >, std::unique_ptr<exactextract::AbstractRaster<short int>, std::default_delete<exactextract::AbstractRaster<short int> > >, std::unique_ptr<exactextract::AbstractRaster<int>, std::default_delete<exactextract::AbstractRaster<int> > >, std::unique_ptr<exactextract::AbstractRaster<long int>, std::default_delete<exactextract::AbstractRaster<long int> > > >&), 6>, std::tuple<const std::variant<std::unique_ptr<exactextract::AbstractRaster<float>, std::default_delete<exactextract::AbstractRaster<float> > >, std::unique_ptr<exactextract::AbstractRaster<double>, std::default_delete<exactextract::AbstractRaster<double> > >, std::unique_ptr<exactextract::AbstractRaster<signed char>, std::default_delete<exactextract::AbstractRaster<signed char> > >, std::unique_ptr<exactextract::AbstractRaster<short int>, std::default_delete<exactextract::AbstractRaster<short int> > >, std::unique_ptr<exactextract::AbstractRaster<int>, std::default_delete<exactextract::AbstractRaster<int> > >, std::unique_ptr<exactextract::AbstractRaster<long int>, std::default_delete<exactextract::AbstractRaster<long int> > > >&>, std::integer_sequence<long unsigned int> >::_S_apply()’
      /usr/include/c++/9/variant:894:19:   in ‘constexpr’ expansion of ‘std::__detail::__variant::__gen_vtable_impl<true, std::__detail::__variant::_Multi_array<exactextract::Feature::ValueType (*)(exactextract::OperationImpl<Derived>::result_type() const [with Derived = exactextract::Quantile]::<lambda(const auto:29&)>&&, const std::variant<std::unique_ptr<exactextract::AbstractRaster<float>, std::default_delete<exactextract::AbstractRaster<float> > >, std::unique_ptr<exactextract::AbstractRaster<double>, std::default_delete<exactextract::AbstractRaster<double> > >, std::unique_ptr<exactextract::AbstractRaster<signed char>, std::default_delete<exactextract::AbstractRaster<signed char> > >, std::unique_ptr<exactextract::AbstractRaster<short int>, std::default_delete<exactextract::AbstractRaster<short int> > >, std::unique_ptr<exactextract::AbstractRaster<int>, std::default_delete<exactextract::AbstractRaster<int> > >, std::unique_ptr<exactextract::AbstractRaster<long int>, std::default_delete<exactextract::AbstractRaster<long int> > > >&), 6>, std::tuple<const std::variant<std::unique_ptr<exactextract::AbstractRaster<float>, std::default_delete<exactextract::AbstractRaster<float> > >, std::unique_ptr<exactextract::AbstractRaster<double>, std::default_delete<exactextract::AbstractRaster<double> > >, std::unique_ptr<exactextract::AbstractRaster<signed char>, std::default_delete<exactextract::AbstractRaster<signed char> > >, std::unique_ptr<exactextract::AbstractRaster<short int>, std::default_delete<exactextract::AbstractRaster<short int> > >, std::unique_ptr<exactextract::AbstractRaster<int>, std::default_delete<exactextract::AbstractRaster<int> > >, std::unique_ptr<exactextract::AbstractRaster<long int>, std::default_delete<exactextract::AbstractRaster<long int> > > >&>, std::integer_sequence<long unsigned int> >::_S_apply_all_alts<0, 1, 2, 3, 4, 5>(__vtable, (std::make_index_sequence<6>(), std::make_index_sequence<6>()))’
      /home/weiqi_tori/GitHub/exactextract/src/operation.cpp:125:55: internal compiler error: in tsubst_copy, at cp/pt.c:15812
        125 |             using result_type = std::decay_t<decltype(static_cast<const Derived*>(this)->get(std::declval<RasterStats<value_type>>()))>;
            |                                                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      Please submit a full bug report,
      with preprocessed source if appropriate.
      See <file:///usr/share/doc/gcc-9/README.Bugs> for instructions.
      [18/29] Building CXX object CMakeFiles/exactextract.dir/src/raster_sequential_processor.cpp.o
      [19/29] Building CXX object python/CMakeFiles/_exactextract.dir/src/pybindings/bindings.cpp.o
      [20/29] Building CXX object python/CMakeFiles/_exactextract.dir/src/pybindings/feature_bindings.cpp.o
      [21/29] Building CXX object CMakeFiles/exactextract.dir/src/stats_registry.cpp.o
      [22/29] Building CXX object CMakeFiles/exactextract.dir/src/utils.cpp.o
      ninja: build stopped: subcommand failed.

      *** CMake build failed
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for exactextract
Failed to build exactextract
ERROR: Could not build wheels for exactextract, which is required to install pyproject.toml-based projects
dbaston commented 4 months ago

It looks like a compiler problem. The CI configurations that are using gcc 11 and 12. I'll have to set up gcc 9 and see if I can find a workaround.

weiqi-tori commented 4 months ago

Thanks for taking on the issue. It is the compiler problem. I have upgraded my gcc to 11 and successfully installed the package.