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.