Cara menginstal GCC 5 di debian jessie 8.1

21

Saya mencoba banyak solusi untuk menginstal pembaruan untuk kompiler gcc saya di server debian. Tidak ada yang berhasil. Saya memerlukan pembaruan kompiler untuk menggunakan fitur baru c ++ 11, karena ini memberikan ABI libcxx11 yang stabil, dan dukungan stabil untuk C ++ 11 (lihat di sini ). Khusus mendapatkan versi `GLIBCXX_3.4.21 'yang tidak termasuk dalam versi gcc kompiler saya saat ini 4.9.2 (Debian 4.9.2-10).

Beberapa petunjuk untuk solusi akan sangat membantu. Terima kasih sebelumnya.

Beberapa tautan ke forum yang terkait dengan masalah saya yang sudah saya coba:

1 2 3 (solusi yang tidak sepenuhnya terkait adalah untuk ubuntu, tapi saya belum menemukan gcc-5 di server ftian dari debian)

mluthra
sumber
Itu disediakan di Debian / pengujian, dan seperti yang Anda lihat, melibatkan perubahan pada pustaka runtime. Seseorang mungkin memberi tahu Anda bagaimana melakukan ini sebagai paket Debian, tetapi efeknya akan sedikit berbeda dari beralih ke konfigurasi pengujian karena banyaknya paket yang terpengaruh.
Thomas Dickey
Mengapa Anda secara khusus membutuhkan dukungan ABI yang baru ? Anda dapat membangun sebagian besar kode C ++ 11 dengan Debian 8's gcc 4.9.2, Anda hanya perlu mengkompilasi ulang ketika Debian 9 dirilis. Jika Anda tidak bisa menunggu, solusi termudah adalah beralih ke testing, tapi itu mungkin bukan ide yang baik di server (tergantung pada apa yang Anda maksud dengan server tentu saja). Peralihan dari gcc 4.9 ke gcc 5 melibatkan transisi perpustakaan, jadi Anda berada dalam dunia kesakitan jika Anda mencoba melakukannya sendiri!
Stephen Kitt
Saya setuju dengan apa yang dikatakan thomas dan stephen, kecuali saya jauh lebih khawatir tentang gagasan menggunakan pengujian pada server. Tidak semua server memerlukan kesamaan jangka panjang dari binari dan pustaka (yang artinya "stabil" dalam konteks debian), untuk beberapa server yang melacak pengujian atau bahkan tidak stabil lebih berguna (jika, katakanlah, fitur canggih dibutuhkan, atau hanya untuk tetap di depan skrip kiddies). Namun, menjalankan pengujian / tidak stabil pada server produksi benar-benar membutuhkan banyak keterampilan dan pengetahuan tentang Debian untuk memperbaiki kerusakan sesekali. Uji peningkatan pada mesin lain atau VM terlebih dahulu.
cas
@cas Saya tidak memikirkan stabilitas binari, melainkan dua kelemahan utama testing(digunakan sendiri): paket kadang-kadang dihapus untuk sementara waktu (jadi pengaturan yang baru saja Anda validasi dalam pengujian Anda VM mungkin tidak lagi tersedia dengan mudah) , dan perbaikan keamanan dapat ditunda (terkadang untuk waktu yang lama jika testingsedang mengalami transisi perpustakaan besar, meskipun ada testing-securityuntuk kasus seperti itu).
Stephen Kitt
1
Jika Anda mengkompilasi ulang program Anda pada sistem Debian (alih-alih menyalinnya) itu harusnya berfungsi dengan baik.
Stephen Kitt

Jawaban:

13

Saya membutuhkan GCC 5+ diinstal pada debian jessie dan, seperti yang tersedia untuk pengujian debian (setidaknya pada Juni-16) Anda dapat menggunakan apt-pinning untuk menginstal paket yang tersedia di sana (lihat https://wiki.debian.org/AptPreferences ) .

Untuk menginstal GCC 5+ dari pengujian pada debian jessie menggunakan apt-pinning:

  1. Tambahkan repo pengujian debian ke sumber apt Anda dengan membuat file di direktori yang /etc/apt/sources.list.dberisi baris

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

  2. Instruksikan debian untuk menggunakan sumber pengujian pada paket tertentu dengan membuat file /etc/apt/preferences.dberisi yang berikut ini:

    Package: *
    Pin: release a=testing
    Pin-Priority: 100
    
  3. Perbarui database yang tepat: sudo apt-get update

  4. Instal gcc dari pengujian: sudo apt-get install -t testing gcc

    Perhatikan bahwa menggunakan -t testingAnda memberitahu apt-get untuk menginstal gcc dari sumber pengujian seperti yang dikonfigurasi sebelumnya.

Saya sangat menyarankan untuk membersihkan kompilasi dan kompilasi ulang ketergantungan sebelum mengkompilasi sumber Anda lagi.

Selamat bersenang-senang!

llekn
sumber
1
Saya belum pernah mencoba ini (saya juga tidak ingin mencobanya), tetapi prosedur Anda menarik. Tidak banyak suite perangkat lunak yang terikat erat, dan dijalin melalui, seluruh sistem Debian seperti GCC. Apakah prosedur Anda benar-benar berhasil? Atau apakah itu menyebabkan lebih banyak masalah daripada menyelesaikannya? Ingin tahu.
thb
1
Saya benar-benar mencobanya dengan hasil yang baik: Saya bisa berhasil mengkompilasi apa yang saya bangun dan sistem terus bekerja tanpa masalah. Namun Anda mungkin benar: mengubah versi GCC dapat merusak kompilasi paket-paket lain (mis. Mengkompilasi sumber ketika menginstal paket-paket dengan pip) , tapi saya pikir prosedur ini adalah yang paling tidak invasif karena aptakan melacak paket mana yang tergantung pada GCC dan akan menginstal versi yang kompatibel sesuai kebutuhan (sejauh yang saya ingat).
llekn
2
Catatan untuk langkah 2: File di /etc/apt/preferences.d/ seharusnya tidak mengandung titik "." dalam nama file, atau akhiri dengan ".pref". Jika tidak, file ini diabaikan. Penjelasan tentang arti nilai 100 dan mengapa itu dipilih akan dihargai.
Ludwig Schulze
Seperti yang saya pahami, semakin banyak Pin-Prioritypaket didapat, semakin banyak preferensi yang didapat dari paket lain dengan angka lebih rendah. Jadi, seperti dalam status halaman AptPrefences Debian , testingsecara default Pin-Priority: 900membuat semua paket tidak testingdapat diinstal secara default. Jadi, menentukan bahwa testingakan memiliki prioritas paket yang lebih Pin-Priority: 100rendah testingmenjadikannya dapat diinstal hanya jika diminta ketika menentukan target diapt-get install -t testing ...
llekn
1
@ LeeK-B Memang, menggunakan Package: gccupgrade seluruh sistem untuk pengujian. Dokumentasi tentang apt-prefencesmembingungkan jadi saya kira inilah yang terjadi: 1: Karena paket dari pengujian memiliki versi yang lebih besar, secara default mereka lebih diutamakan daripada yang standar 2: Menentukan Paket: gccdengan Pin-priority: 100membuat semua paket dari pengujian memiliki prioritas default (lebih tinggi dari standar) kecuali gcc. Justru sebaliknya yang kami inginkan. Saya memperbarui jawaban untuk menghindari kesalahan ini
llekn
6

Untuk menggabungkan 2 jawaban sebelumnya menjadi jawaban yang berfungsi:

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

TAPI!!! Gunakan ini dengan risiko Anda sendiri saat Anda menginstal paket dari tidak stabil. Anda mungkin juga ingin menghapus /etc/apt/sources.list.d/unstable.listsetelah Anda menginstal paket.

Jika memungkinkan, instal di bawah Docker agar Anda tidak mengacaukan OS Anda. Jarak tempuh Anda mungkin beragam.

johndodo
sumber
4

Mulai 2017-02-19, gcc-5 telah dihapus dari pengujian:

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

Anda bisa apt-get install gcc-5jika Anda pertama kali mengeksekusi baris ini sebagai root:

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

Kemudian, Anda mungkin ingin mengubah prioritas sumber itu /etc/apt/preferences.dsesuai jawaban llekn.

nachoparker
sumber
1

Saya mengalami masalah minggu lalu; sepertinya pada 2019-01-23 gcc-5 telah dihapus dari repositori sepenuhnya. (Lihat https://tracker.debian.org/pkg/gcc-5 )

Jika Anda benar-benar membutuhkannya saya kira Anda bisa mengkompilasinya dari sumber. Saya akan menemukan cara untuk menghilangkan ketergantungan dari sistem saya.

JDong
sumber