osrm-backend icon indicating copy to clipboard operation
osrm-backend copied to clipboard

OSRM build fails on GCC 10.2.1

Open Zverik opened this issue 3 years ago • 1 comments

Building the OSRM in Debian Bullseye (the latest stable one) fails with the "use of deleted function" error. You can see it with the Dockerfile in this repo. Same with Ubuntu 22.04. But OSRM builds with Ubuntu 20.04 — although it uses much more memory for processing data for some reason.

Bisected it to #6279.

#9 78.05 /src/third_party/libosmium/include/osmium/osm/entity.hpp: In instantiation of 'TSubitem& osmium::detail::subitem_of_type(TIter, const TIter&) [with TSubitem = const osmium::TagList; TIter = osmium::memory::CollectionIterator<const osmium::memory::Item>]':
#9 78.05 /src/third_party/libosmium/include/osmium/osm/object.hpp:333:83:   required from here
#9 78.05 /src/third_party/libosmium/include/osmium/osm/entity.hpp:54:29: error: use of deleted function 'osmium::memory::Collection<osmium::Tag, osmium::item_type::tag_list>::Collection(osmium::memory::Collection<osmium::Tag, osmium::item_type::tag_list>&&)'
#9 78.05    54 |             static TSubitem subitem{};
#9 78.05       |                             ^~~~~~~
#9 78.05 In file included from /src/third_party/libosmium/include/osmium/osm/relation.hpp:36,
#9 78.05                  from /src/include/extractor/extraction_relation.hpp:6,
#9 78.05                  from /src/src/extractor/extractor.cpp:8:
#9 78.05 /src/third_party/libosmium/include/osmium/memory/collection.hpp:117:15: note: 'osmium::memory::Collection<osmium::Tag, osmium::item_type::tag_list>::Collection(osmium::memory::Collection<osmium::Tag, osmium::item_type::tag_list>&&)' is implicitly deleted because the default definition would be ill-formed:
#9 78.05   117 |         class Collection : public Item {
#9 78.05       |               ^~~~~~~~~~
#9 78.05 /src/third_party/libosmium/include/osmium/memory/collection.hpp:117:15: error: use of deleted function 'osmium::memory::Item::Item(osmium::memory::Item&&)'
#9 78.05 In file included from /src/third_party/libosmium/include/osmium/memory/buffer.hpp:36,
#9 78.05                  from /src/include/extractor/scripting_environment.hpp:9,
#9 78.05                  from /src/include/extractor/graph_compressor.hpp:4,
#9 78.05                  from /src/include/extractor/extractor.hpp:34,
#9 78.05                  from /src/src/extractor/extractor.cpp:1:
#9 78.05 /src/third_party/libosmium/include/osmium/memory/item.hpp:146:13: note: declared here
#9 78.05   146 |             Item(Item&&) = delete;
#9 78.05       |             ^~~~
#9 78.05 In file included from /src/third_party/libosmium/include/osmium/memory/buffer.hpp:38,
#9 78.05                  from /src/include/extractor/scripting_environment.hpp:9,
#9 78.05                  from /src/include/extractor/graph_compressor.hpp:4,
#9 78.05                  from /src/include/extractor/extractor.hpp:34,
#9 78.05                  from /src/src/extractor/extractor.cpp:1:
#9 78.05 /src/third_party/libosmium/include/osmium/osm/entity.hpp: In instantiation of 'TSubitem& osmium::detail::subitem_of_type(TIter, const TIter&) [with TSubitem = osmium::RelationMemberList; TIter = osmium::memory::CollectionIterator<osmium::memory::Item>]':
#9 78.05 /src/third_party/libosmium/include/osmium/osm/relation.hpp:188:86:   required from here
#9 78.05 /src/third_party/libosmium/include/osmium/osm/entity.hpp:54:29: error: use of deleted function 'osmium::memory::Collection<osmium::RelationMember, osmium::item_type::relation_member_list>::Collection(osmium::memory::Collection<osmium::RelationMember, osmium::item_type::relation_member_list>&&)'
#9 78.05    54 |             static TSubitem subitem{};
#9 78.05       |                             ^~~~~~~
#9 78.05 In file included from /src/third_party/libosmium/include/osmium/osm/relation.hpp:36,
#9 78.05                  from /src/include/extractor/extraction_relation.hpp:6,
#9 78.05                  from /src/src/extractor/extractor.cpp:8:
#9 78.05 /src/third_party/libosmium/include/osmium/memory/collection.hpp:117:15: note: 'osmium::memory::Collection<osmium::RelationMember, osmium::item_type::relation_member_list>::Collection(osmium::memory::Collection<osmium::RelationMember, osmium::item_type::relation_member_list>&&)' is implicitly deleted because the default definition would be ill-formed:
#9 78.05   117 |         class Collection : public Item {
#9 78.05       |               ^~~~~~~~~~

Looks like it's caused by this gcc bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98642

Zverik avatar Aug 09 '22 13:08 Zverik

Most likely this should fix the problem, because I see changes exactly on the problematic line in libosmium diff and also there are something about C++17 compatibility in Release Notes of 2.17.2: Screenshot 2022-08-09 at 18 31 24

I was going to configure CI to check Docker image on every PR, but have weird errors for some reason 🤔

SiarheiFedartsou avatar Aug 09 '22 16:08 SiarheiFedartsou