nvcc/gcc 在 Ubuntu 20.04/21.04 中损坏:如何修补 gcc(通过 apt 安装)?

nvcc/gcc 在 Ubuntu 20.04/21.04 中损坏:如何修补 gcc(通过 apt 安装)?

问题:应用 gcc 补丁的分步解决方案是什么,特别是当它通过 apt 安装时?(我想应用提到的那个这里

我尝试按照多个指南来修补 gcc,但它们要么依赖于 gcc 是通过源代码安装的,要么依赖于通过 git 安装的。此外,对于经验不足的用户来说,补丁是什么/它是哪个文件/它是什么样子的、如何从错误报告中获取它以及如何应用它,这些都非常令人困惑。按照指南中概述的步骤操作时,我要么收到错误,提示无法正确解析下载的补丁,要么似乎什么也没发生。是补丁?

背景:gcc 10.3 中有一个错误:“编译器在使用 nvcc 的 chrono 库上因分段错误而崩溃”(见下面的错误消息)。错误报告中提到的补丁未包含在 apt 附带的版本中。因此,Ubuntu 20.04(可能是 21.04,以及其他 Linux 发行版)附带了损坏的版本,因此无法编译 CUDA 代码。请注意,该错误应该在 gcc 11 中得到修复,但这似乎不受 CUDA 支持

错误信息:

/usr/include/c++/10/chrono: In substitution of ‘template<class _Rep, class _Period> template<class _Period2> using __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::den, _Period::den))), ((_Period2::den / std::chrono::duration<_Rep, _Period>::_S_gcd(_Period2::den, _Period::den)) * (_Period::num / std::chrono::duration<_Rep, _Period>::_S_gcd(_Period2::num, _Period::num)))>::den == 1)> [with _Period2 = _Period2; _Rep = _Rep; _Period = _Period]’:
/usr/include/c++/10/chrono:473:154:   required from here
/usr/include/c++/10/chrono:428:27: internal compiler error: Segmentation fault
  428 |  _S_gcd(intmax_t __m, intmax_t __n) noexcept
      |                           ^~~~~~
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-10/README.Bugs> for instructions.
ninja: build stopped: subcommand failed.

我到目前为止尝试过的:

  • 彻底清除与 Nvidia/CUDA 相关的所有内容并重新安装(我尝试了 CUDA 版本 11.2、11.3、11.4)
  • 升级到 gcc-11 g++-11,但是这个似乎不受 CUDA 支持
  • 修补 gcc,但我失败了,或者这似乎没有任何作用
  • 降级到 gcc-9 可以解决问题,但我认为不是一个长期的解决方案

有关的:

相关内容