Рейтинг:1

nvcc/gcc не работает в Ubuntu 20.04/21.04: как исправить gcc (установленный через apt)?

флаг mt

Вопрос: Каково пошаговое решение для применения патча gcc, в частности, когда он устанавливается через apt? (Я хочу применить упомянутый здесь)

Я пытался следовать нескольким руководствам о том, как исправить gcc, но они либо полагаются на то, что gcc был установлен через исходный код, либо через git. Кроме того, для менее опытных пользователей крайне запутанно, ЧТО это за патч/какой это файл/как он выглядит, как его получить из отчета об ошибке и как его применить. При выполнении шагов, описанных в руководствах, я либо получаю сообщение об ошибке, что загруженный патч не может быть правильно проанализирован, либо ничего не происходит. Является это патч?

Задний план: В gcc 10.3 есть ошибка: «Сбой компилятора из-за ошибки сегментации в хронобиблиотеке с использованием nvcc» (см. сообщение об ошибке ниже). Патч, упомянутый в отчете об ошибке, не включен в версию, поставляемую с apt. Поэтому Ubuntu 20.04 (возможно, 21.04, а также другие дистрибутивы Linux) поставляется со сломанной версией, так что код CUDA не может быть скомпилирован. Обратите внимание, что ошибка должна быть исправлена ​​в gcc 11, но это кажется, не поддерживается CUDA.

Сообщение об ошибке:

/usr/include/c++/10/chrono: вместо âtemplate<class _Rep, class _Period> template<class _Period2> с использованием __is_harmonic = std::__bool_constant<(std::ratio<((_Period2::num / std::chrono::duration<_Rep, _Period>::_S_gcd(_Period2::num, _Period::num)) * (_Period::den / std::chrono::duration<_Rep, _Period>::_S_gcd (_Period2::день, _Period::день))), ((_Period2::день / std::chrono::duration<_Rep, _Period>::_S_gcd(_Period2::день, _Period::ден)) * ( _Period::num / std::chrono::duration<_Rep, _Period>::_S_gcd(_Period2::num, _Period::num)))>::den == 1)> [с _Period2 = _Period2; _Rep = _Rep; _Период = _Период] :
/usr/include/c++/10/chrono:473:154: требуется отсюда
/usr/include/c++/10/chrono:428:27: внутренняя ошибка компилятора: ошибка сегментации
  428 | _S_gcd(intmax_t __m, intmax_t __n) нет кроме
      | ^~~~~~
Пожалуйста, отправьте полный отчет об ошибке,
с предварительно обработанным исходным кодом, если это необходимо.
Инструкции см. в <file:///usr/share/doc/gcc-10/README.Bugs>.
ниндзя: сборка остановлена: подкоманда не удалась.

Что я пробовал до сих пор:

  • полная очистка всего, что связано с Nvidia/CUDA, и переустановка (я пробовал версии CUDA 11.2, 11.3, 11.4)
  • обновление до gcc-11 g++-11, но это кажется, не поддерживается CUDA
  • пропатчил gcc, но у меня либо не получилось, либо это ничего не дает
  • переход на gcc-9 решает проблему, но, на мой взгляд, это не долгосрочное решение.

Связанный:

флаг cc
Разве переход на 10.2 не решит проблему?
флаг mt
@ubfan1 да, я считаю, что ты прав. Однако я не нашел простого способа сделать это, по крайней мере, не с помощью apt, поскольку я могу выбрать только «gcc-10», а не подверсию.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.