Неустранимая ошибка Oneapi: сравните: нет такого файла или каталога после перезапуска системы
У меня есть проект, над которым я работаю для исследования более года, Oneapi интегрируется более 6 месяцев, все работает и все. Вчера я обновил тестовый код и запустил тесты, ничего необычного. Сегодня я перезапустил свою машину (Ubuntu 20.04.2 LTS, 64 бита) для обновлений, и теперь, когда я пытаюсь скомпилировать проект, он дает:
In file included from /opt/intel/oneapi/tbb/2021.2.0/env/../include/oneapi/tbb/enumerable_thread_specific.h:26,
from /opt/intel/oneapi/tbb/2021.2.0/env/../include/oneapi/tbb/combinable.h:22,
from /opt/intel/oneapi/tbb/2021.2.0/env/../include/oneapi/tbb.h:35,
from ...file name omitted for privacy...
/opt/intel/oneapi/tbb/2021.2.0/env/../include/oneapi/tbb/concurrent_vector.h:33:10: fatal error: compare: No such file or directory
33 | #include <compare>
| ^~~~~~~~~
compilation terminated.
Это произошло только после перезапуска системы (возможно, были нарушены некоторые ссылки?) И происходит только в файлах, для которых требуется concurrent_vector.h
В идеале я бы предпочел исправление, которое не требует переустановки oneapi,
apt-get update
с последующим
apt-get upgrade
не исправил, и не перезапустил систему снова.
1 ответ
Просто наткнулся на то же самое. Похоже, что TBB автоматически включает
<compare>
если вы компилируете с
-std=c++20
:
#define __TBB_CPP20_COMPARISONS_PRESENT __TBB_CPP20_PRESENT
GCC только добавил заголовок сравнения в libstdc++-10.
Для меня это похоже на ошибку в TBB. Я открыл здесь вопрос .
В качестве исправления я смог понизить версию своего проекта до C++17. Если это не вариант, вы можете подумать о копировании
detail/_config.h
, определяя
__TBB_CPP20_COMPARISONS_PRESENT 0
в свою копию и включив ее перед включением любого заголовка TBB. Охрана включения должна гарантировать, что ваша версия заменяет сломанную версию TBB.