неверная компиляция шаблона - PullRequest
0 голосов
/ 07 октября 2018

Я включил заголовки CGAL в свою библиотеку Android, и я получаю эту ошибку.Я не использую CGAL :: Epick сам, и это тип, который шаблонизируется в CGAL.Похоже, что это не специфичная для CGAL проблема, но может быть проблемой с набором инструментов / libc ++, с которой мне могут помочь эксперты по Android C ++.Пожалуйста, прокомментируйте.

In file included from /home/ypv/gazebo_dev/240GB/android-ndk-samples/android-dso-server/app/src/main/cpp/dso_server/planning/planning_server/dStar/navGraph.cpp:1:
  In file included from /home/ypv/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/string:470:
  In file included from /home/ypv/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/string_view:169:
  In file included from /home/ypv/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/__string:56:
  In file included from /home/ypv/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/algorithm:643:
  In file included from /home/ypv/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/memory:650:
  In file included from /home/ypv/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/iterator:427:
  /home/ypv/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/__functional_base:60:21: error: invalid operands to binary expression ('const CGAL::Epick' and 'const CGAL::Epick')
          {return __x < __y;}

1 Ответ

0 голосов
/ 13 октября 2018

Я нашел решение проблемы.Фактически, компилятор искал оператор сравнения CGAL :: Epick, которого не было для каждой кодовой базы, где ядра CGAL неявно добавлялись к структурам stl, например, к вектору и карте.Структуры были повторены в стиле C ++ 11, через неправильную копию вместо ссылки:

//not
for (auto: vectorOfStructsContainingEpickSets)
//but
for (auto&:vectorOfStructsContainingEpickSets)

Эти структуры были глубоко скопированы в результате, и при глубоком копировании структуры, содержащей std:: set, где сам объект является ключом, вызывается оператор неравенства, т.е. сравнивается epick.Различные производные эпосов были сохранены таким образом.

Да, ответ на этот вопрос был в конечном счете, ядра CGAL не должны сравниваться, даже неявно.

Что еще неизвестно, так это то, почему gcc-5 x86_64 скомпилированная Linux база кода не жаловалась, что произошла эпическая ошибка в кросс-компиляции clang android x86_64.

...