Cách cài đặt GCC 5 trên debian jessie 8.1


21

Tôi đã thử nhiều giải pháp để cài đặt bản cập nhật cho trình biên dịch gcc của mình trên máy chủ debian. Không ai trong số họ làm việc. Tôi cần cập nhật trình biên dịch để sử dụng các tính năng mới của c ++ 11, vì điều này cung cấp libcxx11 ABI ổn định và hỗ trợ ổn định cho C ++ 11 (tham khảo tại đây ). Cụ thể nhận phiên bản `GLIBCXX_3.4.21 'không được bao gồm trong trình biên dịch gcc hiện tại của tôi phiên bản 4.9.2 (Debian 4.9.2-10).

Một số gợi ý cho giải pháp sẽ hữu ích. Cảm ơn trước.

Một số liên kết đến diễn đàn liên quan đến vấn đề của tôi mà tôi đã thử:

1 2 3 (giải pháp không hoàn toàn liên quan là dành cho Ubuntu, nhưng tôi chưa thể tìm thấy gcc-5 trong máy chủ ftp của debian)


Điều đó được cung cấp trong Debian / tests, và như bạn thấy, liên quan đến các thay đổi đối với các thư viện thời gian chạy. Ai đó có thể tư vấn cho bạn cách thực hiện điều này như một gói Debian, nhưng hiệu quả sẽ khác một chút so với việc chuyển sang cấu hình thử nghiệm do số lượng lớn các gói bị ảnh hưởng.
Thomas Dickey

Tại sao bạn đặc biệt cần hỗ trợ ABI mới ? Bạn có thể xây dựng hầu hết mã C ++ 11 với gcc 4.9.2 của Debian 8, bạn sẽ chỉ cần biên dịch lại mã khi Debian 9 được phát hành. Nếu bạn không thể chờ đợi, giải pháp đơn giản nhất sẽ là chuyển sang testing, nhưng đó có lẽ không phải là một ý tưởng hay trên máy chủ (tất nhiên phụ thuộc vào ý nghĩa của bạn đối với máy chủ). Việc chuyển đổi từ gcc 4.9 sang gcc 5 liên quan đến việc chuyển đổi thư viện, vì vậy bạn sẽ rơi vào thế giới đau khổ nếu bạn cố gắng tự làm điều đó!
Stephen Kitt

Tôi đồng ý với những gì thomas và stephen nói, ngoại trừ tôi ít lo lắng hơn về ý tưởng sử dụng thử nghiệm trên máy chủ. Không phải tất cả các máy chủ đều yêu cầu sự giống nhau lâu dài của các nhị phân và thư viện (đó là "ổn định" nghĩa là gì trong bối cảnh debian), đối với một số máy chủ theo dõi kiểm tra hoặc thậm chí không ổn định là hữu ích hơn (nếu, nói, các tính năng cạnh chảy máu là cần thiết, hoặc chỉ để đi trước các kịch bản kiddies). Tuy nhiên, việc chạy thử nghiệm / không ổn định trên các máy chủ sản xuất hoàn toàn đòi hỏi nhiều kỹ năng và kiến ​​thức về Debian để khắc phục sự cố thỉnh thoảng. Thử nghiệm nâng cấp trên các máy hoặc VM khác trước.
cas

@cas Tôi không nghĩ đến sự ổn định của các nhị phân, nhưng hai nhược điểm chính của testing(được sử dụng riêng): các gói đôi khi bị xóa tạm thời (vì vậy thiết lập mà bạn vừa xác thực trong VM thử nghiệm của bạn có thể không còn khả dụng nữa) và sửa lỗi bảo mật có thể bị trì hoãn (đôi khi trong một thời gian dài nếu testingđang trải qua quá trình chuyển đổi thư viện lớn, mặc dù có testing-securitynhững trường hợp như vậy).
Stephen Kitt

1
Nếu bạn biên dịch lại chương trình của mình trên hệ thống Debian (thay vì sao chép lại), nó sẽ hoạt động tốt.
Stephen Kitt

Câu trả lời:


13

Tôi cần GCC 5+ được cài đặt trên debian jessie và, như có sẵn để thử nghiệm debian (ít nhất là vào ngày 16 tháng 6), bạn có thể sử dụng apt-pinning để cài đặt các gói có sẵn ở đó (xem https://wiki.debian.org/AptPreferences ) .

Để cài đặt GCC 5+ từ thử nghiệm trên debian jessie bằng cách sử dụng apt-pinning:

  1. Thêm repo thử nghiệm debian vào nguồn apt của bạn bằng cách tạo một tệp trong thư mục /etc/apt/sources.list.dchứa dòng

    deb http://ftp.us.debian.org/debian testing main contrib non-free

  2. Hướng dẫn debian sử dụng các nguồn kiểm tra trên các gói nhất định bằng cách tạo một tệp /etc/apt/preferences.dcó chứa các mục sau:

    Package: *
    Pin: release a=testing
    Pin-Priority: 100
    
  3. Cập nhật cơ sở dữ liệu apt: sudo apt-get update

  4. Cài đặt gcc từ thử nghiệm: sudo apt-get install -t testing gcc

    Lưu ý rằng việc sử dụng -t testingbạn nói với apt-get để cài đặt gcc từ các nguồn thử nghiệm như được định cấu hình trước đó.

Tôi thực sự khuyên bạn nên xóa mọi biên dịch và biên dịch lại bất kỳ sự phụ thuộc nào trước khi biên dịch lại các nguồn của bạn.

Chúc vui vẻ!


1
Tôi chưa bao giờ thử điều này (tôi cũng không muốn thử), nhưng thủ tục của bạn rất thú vị. Không có nhiều bộ phần mềm được liên kết chặt chẽ và được dệt xuyên suốt toàn bộ hệ thống Debian như GCC. Thủ tục của bạn thực sự làm việc? Hay nó gây ra nhiều vấn đề hơn nó giải quyết? Hiếu kỳ.
thb

1
Tôi thực sự đã thử nó với kết quả tốt: Tôi có thể biên dịch thành công những gì tôi đang xây dựng và hệ thống tiếp tục hoạt động mà không gặp vấn đề gì. Tuy nhiên, bạn có thể đúng: thay đổi phiên bản GCC có thể phá vỡ các gói khác (tức là biên dịch nguồn khi cài đặt gói pip) , nhưng tôi nghĩ rằng quy trình này ít xâm lấn nhất vì aptsẽ theo dõi gói nào phụ thuộc vào GCC và sẽ cài đặt các phiên bản tương thích khi cần (theo như tôi có thể nhớ).
llekn

2
Lưu ý cho bước 2: Tệp trong /etc/apt/preferences.d/ không được chứa dấu chấm "." trong tên tệp hoặc kết thúc bằng ".pref". Nếu không, tập tin này được bỏ qua. Một lời giải thích về ý nghĩa của giá trị 100 và tại sao nó được chọn sẽ được đánh giá cao.
Ludwig Schulze

Theo tôi hiểu, Pin-Prioritymột gói càng được nhiều, nó sẽ càng được ưu tiên hơn các gói khác với số lượng thấp hơn. Vì vậy, như trong trạng thái trang AptPrefences của Debian , testingtheo mặc định, Pin-Priority: 900làm cho tất cả các gói testingđược cài đặt theo mặc định. Vì vậy, việc chỉ định rằng testingsẽ có mức độ ưu tiên các gói Pin-Priority: 100thấp hơn testingkhiến chúng chỉ có thể cài đặt được nếu được yêu cầu khi chỉ định mục tiêu tạiapt-get install -t testing ...
llekn

1
@ LeeK-B Thật vậy, sử dụng Package: gccnâng cấp toàn bộ hệ thống để thử nghiệm. Tài liệu về apt-prefencesrất khó hiểu nên tôi cho rằng đây là điều đang xảy ra: 1: Vì các gói từ thử nghiệm có phiên bản lớn hơn, theo mặc định, chúng được ưu tiên hơn các gói tiêu chuẩn 2: Gói xác định: gccvới Pin-priority: 100tất cả các gói từ thử nghiệm có mức độ ưu tiên mặc định (cao hơn tiêu chuẩn) ngoại trừ gcc. Chính xác là ngược lại mà chúng tôi muốn. Tôi đã cập nhật câu trả lời để tránh sai lầm này
llekn

6

Để kết hợp 2 câu trả lời trước thành một câu trả lời:

echo "deb http://ftp.us.debian.org/debian unstable main contrib non-free" >> /etc/apt/sources.list.d/unstable.list
apt-get update
apt-get install -t unstable gcc-5

NHƯNG!!! Sử dụng điều này có nguy cơ của riêng bạn khi bạn đang cài đặt các gói từ không ổn định. Bạn cũng có thể muốn xóa /etc/apt/sources.list.d/unstable.listsau khi đã cài đặt các gói.

Nếu có thể, hãy cài đặt bên dưới Docker để bạn không làm hỏng hệ điều hành của mình. Số dặm của bạn có thể thay đổi.


4

Kể từ 2017/02/19, gcc-5 đã bị xóa khỏi thử nghiệm:

https://tracker.debian.org/pkg/gcc-5

Bạn có thể apt-get install gcc-5nếu bạn thực hiện dòng này dưới dạng root:

echo "deb http://ftp.us.debian.org/debian unstable main contrib non-free" > /etc/apt/sources.list.d/unstable.list

Sau đó, có lẽ bạn sẽ muốn thay đổi mức độ ưu tiên của nguồn đó /etc/apt/preferences.dtheo câu trả lời của llekn.


1

Tôi đã gặp vấn đề vào tuần trước; có vẻ như vào năm 2019-01-23 gcc-5 đã bị xóa hoàn toàn khỏi kho lưu trữ. (Xem https://tracker.debian.org/pkg/gcc-5 )

Nếu bạn thực sự cần nó, tôi cho rằng bạn có thể biên dịch nó từ nguồn. Tôi sẽ tìm cách để loại bỏ sự phụ thuộc khỏi hệ thống của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.