Câu hỏi: Giải pháp từng bước để áp dụng bản vá gcc, đặc biệt khi nó được cài đặt qua apt là gì? (Tôi muốn áp dụng cái được đề cập đây)
Tôi đã thử làm theo nhiều hướng dẫn về cách vá gcc, nhưng chúng đều dựa vào gcc đó đã được cài đặt qua nguồn hoặc qua git. Hơn nữa, đối với những người dùng ít kinh nghiệm hơn, sẽ cực kỳ khó hiểu bản vá là GÌ/tập tin nào/nó trông như thế nào, cách lấy bản vá từ báo cáo lỗi và cách áp dụng bản vá đó. Khi làm theo các bước được nêu trong hướng dẫn, tôi gặp lỗi không thể phân tích cú pháp chính xác bản vá đã tải xuống hoặc dường như không có gì xảy ra. Là cái này mảnh vụn?
Lý lịch: Có một lỗi trong gcc 10.3: "Trình biên dịch gặp sự cố với lỗi phân đoạn trên thư viện chrono sử dụng nvcc" (xem thông báo lỗi bên dưới). Bản vá được đề cập trong báo cáo lỗi không có trong phiên bản đi kèm với apt. Do đó, Ubuntu 20.04 (có thể là 21.04, cũng như các bản phân phối Linux khác) đi kèm với phiên bản bị hỏng, do đó không thể biên dịch mã CUDA. Lưu ý rằng lỗi được cho là đã được sửa trong gcc 11, nhưng điều này dường như không được hỗ trợ bởi CUDA.
Thông báo lỗi:
/usr/include/c++/10/chrono: Thay thế âtemplate<class _Rep, class _Period> template<class _Period2> bằng cách sử dụng __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)> [với _Period2 = _Period2; _Đại diện = _Đại diện; _Period = _Period]â:
/usr/include/c++/10/chrono:473:154: bắt buộc từ đây
/usr/include/c++/10/chrono:428:27: lỗi trình biên dịch nội bộ: Lỗi phân đoạn
428 | _S_gcd(intmax_t __m, intmax_t __n) không ngoại lệ
| ^~~~~~~
Vui lòng gửi báo cáo lỗi đầy đủ,
với nguồn tiền xử lý nếu thích hợp.
Xem <file:///usr/share/doc/gcc-10/README.Bugs> để biết hướng dẫn.
ninja: quá trình xây dựng đã dừng: lệnh phụ không thành công.
Những gì tôi đã cố gắng cho đến nay:
- xóa hoàn toàn mọi thứ liên quan đến Nvidia/CUDA và cài đặt lại (Tôi đã thử CUDA phiên bản 11.2, 11.3, 11.4)
- nâng cấp lên gcc-11 g++-11, nhưng điều này dường như không được hỗ trợ bởi CUDA
- vá gcc, nhưng tôi đã thất bại hoặc điều này dường như không làm được gì
- hạ cấp xuống gcc-9 giải quyết được vấn đề, nhưng theo tôi không phải là giải pháp lâu dài
Có liên quan: