Điểm:2

Các phiên bản của libgcc-s1 và gcc-base so với phiên bản GCC mặc định trong 20.04 LTS

lá cờ cn

Ubuntu 20.04 LTS (ít nhất là hình ảnh docker lõi) được phân phối với libgcc-s1 và gcc-10-base phiên bản 10.3.0(-1ubuntu1~20.04), xem, ví dụ: tệp kê khai tại https://partner-images.canonical.com/core/focal/20211103/ubuntu-focal-core-cloudimg-amd64.manifest .

Phiên bản mặc định của GCC trong 20.04 LTS là GCC 9, không phải GCC 10.

Lời giải thích cho sự khác biệt rõ ràng này là gì? - Tại sao không phân phối các phiên bản 9.x của các gói đó? Điều này có liên quan đến phiên bản GCC được sử dụng để biên dịch các gói dựa trên C trong 20.04LTS không? Hầu hết (tất cả?) Các gói dựa trên C của 20.04 LTS có được biên dịch với GCC 10 không?

guiverc avatar
lá cờ cn
`gcc` & `gcc-10-base` là các gói khác nhau. Ubuntu 20.04 LTS sử dụng gcc `gcc | 4:9.3.0-1ubuntu2 | tiêu cự | amd64, arm64, armhf, i386, ppc64el, riscv64, s390x` nhưng `gcc-10` cũng có sẵn (https://packages.ubuntu.com/focal/gcc-10) với nó được sử dụng để biên dịch một số tùy chọn.
lá cờ cn
Vì vậy, một số (tất cả?) Gói 20.04 LTS dựa trên C được biên dịch với GCC 10?
guiverc avatar
lá cờ cn
Xin lỗi, tôi không thể nói với thẩm quyền về những gì đã biên soạn những gì; Tôi mong đợi các gói liên quan đến hạt nhân sẽ được biên dịch bởi phiên bản mới hơn nhưng tôi không theo dõi `gcc`, điều đó thật đáng tiếc.
Knud Larsen avatar
lá cờ by
Ubuntu 20.04 "cập nhật tiêu điểm **vũ trụ**" : gcc-10 (10.3.0-1ubuntu1~20.04) https://packages.ubuntu.com/focal-updates/gcc-10 ........ .( gcc mặc định vẫn là v9 ).
Điểm:0
lá cờ us

Tuyên bố miễn trừ trách nhiệm: Tôi còn khá mới với Ubuntu. Tôi có nhiều kinh nghiệm với RHEL và SLES và gần đây đã phải tìm hiểu các phiên bản Ubuntu LTS vì một số phần cứng ARM64 không muốn khởi động bất kỳ thứ gì khác.

Tóm lược

Thực tế, các bản phát hành Ubuntu thường đi kèm với một số thành phần từ GCC mới hơn so với GCC mặc định của bản phát hành. Rõ ràng họ làm điều này để có thể cung cấp các phiên bản trình biên dịch sau này, nếu bạn muốn sử dụng chúng.

  • Gói gcc-10-base chỉ cung cấp tài liệu.
  • Gói libgcc-s1 cung cấp một thư viện quan trọng, libgcc_s.so.1. Điều đó cung cấp các hàm trợ giúp cho mã do trình biên dịch tạo ra: Tôi biết điều đó rất quan trọng để xử lý các ngoại lệ C++ được ném qua ngăn xếp cuộc gọi C.
  • Một thư viện quan trọng khác là libstdC++.so.6. Điều đó cung cấp các chức năng hỗ trợ C++.
  • Glibc (libc.so.6, libm.so.6 và các thư viện khác) cũng quan trọng nhưng không gắn với phiên bản GCC.

Tất cả các thư viện này đều có các quy tắc tương thích rất mạnh. Về cơ bản, phiên bản mới hơn của thư viện sẽ luôn tương thích với các phiên bản trước đó, loại bỏ một số phiên bản cũ từ lịch sử ban đầu của GCC và Linux.

Ban đầu, không rõ tại sao Ubuntu và Debian cung cấp thời gian chạy muộn hơn trình biên dịch, nhưng sẽ rõ hơn khi bạn xem phạm vi phiên bản GCC có sẵn trên các phiên bản Ubuntu LTS gần đây:

Phân phối Thời gian chạy Debian GCC được phát hành GCC mặc định GCC bổ sung
Ubuntu 16.04 tháng 4 năm 2016 9.x 5.x 5.4 4.7, 4.8, 4.9
Ubuntu 18.04 tháng 4 năm 2018 10.x 8.x 7.5 4.8, 5.5, 6.5. 8.4
Ubuntu 20.04 Tháng 4 năm 2020 11.x 9.x & 10.x 9.3 7.4, 8.4, 10.3

Tại thời điểm đó, nó trở nên rõ ràng một cách hợp lý. Ubuntu 20.04 có thời gian chạy mã được biên dịch bằng GCC 9.x và 10.x (GCC 10.x không yêu cầu bất kỳ chức năng thư viện bổ sung nào mà GCC 9.x không sử dụng). Bạn có thể cài đặt bất kỳ hỗn hợp GCC 7.4, 8.4 và 10.3 nào làm trình biên dịch bổ sung và tất cả chúng sẽ hoạt động. Các thư viện thời gian chạy trên Ubuntu 20.04 sẽ hỗ trợ mã được biên dịch bằng bất kỳ trình biên dịch nào trong số đó.

Tại sao không gửi GCC 10.3 cùng với Ubuntu 20.04? Các thư viện thời gian chạy thường ổn định hơn các trình biên dịch. GCC 10 sẽ được phát hành lần đầu tiên (dưới dạng 10.1) vào khoảng thời gian 20.04 được kết hợp với nhau. Xây dựng một bản phát hành LTS với một trình biên dịch hoàn toàn mới sẽ là một việc làm liều lĩnh; vận chuyển các thư viện thời gian chạy mới, sau khi kiểm tra chúng bằng mã được tạo bằng GCC 9 sẽ an toàn hơn rất nhiều và cho phép thêm GCC 10 khi nó đã ổn định.

Canonical không cung cấp GCC 11 cho 20.04 vì nó không có thời gian chạy cần thiết. Đối với những thứ đó, bạn cần có Ubuntu mới hơn.

Làm thế nào để tìm thấy tất cả những thứ này ra

/usr/share/doc/gcc/README.Debian có một số thông tin và Ununtu 20.04 dựa trên Debian 11 âBullseyeâ.

truy vấn dpkg --listfiles gcc-10-base cho chúng tôi thấy rằng gcc-10-base chỉ cung cấp tài liệu.

truy vấn dpkg --listfiles libgcc-s1 cho chúng tôi thấy rằng libgcc-s1 cung cấp /lib/x86_64-linux-gnu/libgcc_s.so.1, đây là một trong những thư viện thời gian chạy cơ bản cho GCC.

Các thư viện thời gian chạy cơ bản khác cho C/C++ là glibc, độc lập với GCC và libstdC++. danh sách truy vấn dpkg | grep libstdc cho chúng tôi thấy hai gói:

ii libstdc++-9-dev:amd64 9.3.0-17ubuntu1~20.04 AMD64 Thư viện C++ chuẩn GNU v3 ...
ii libstdc++6:amd64 10.3.0-1ubuntu1~20.04 AMD64 Thư viện C++ chuẩn GNU v3

libstdc++6 là phiên bản GCC 10.3; các -dev gói là phiên bản GCC 9.3.

truy vấn dpkg --listfiles libstdc++-9-dev cho chúng tôi thấy rằng gói này cung cấp các tệp tiêu đề, thư viện lưu trữ và tài liệu để phát triển bằng C++ với GCC 9.

truy vấn dpkg --listfiles libstdC++6 cho chúng tôi thấy rằng gói này cung cấp tài liệu, một số tập lệnh Python và hai tệp thực sự quan trọng:

/usr/lib/x86_64-linux-gnu/libstdc++.so.6
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28

Các .so.6 tập tin là những chương trình được liên kết với. Nó thực sự là một liên kết mềm đến .so.6.028 tập tin. Đó là tên của phiên bản GCC 10 của libstdc++, thư viện hỗ trợ GCC cho C++. Bạn có thể lấy ánh xạ giữa các tên đó và các phiên bản GCC đây. Cuộn xuống và bạn sẽ tìm thấy một số bảng.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.