Mengunduh g ++ 4.8 dari PPA tetapi tidak dapat menetapkannya sebagai default?

15

Saya telah mengunduh g ++ 4.8 di Ubuntu 12.10 dengan melakukan:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install g++-4.8

tetapi ketika saya melakukannya:

sudo update-alternatives --config g++

untuk beralih versi g ++ dikatakan:

update-alternatives: error: no alternatives for g++.

Namun jika saya lakukan:

g++ --version

ia mengatakan:

g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Bagaimana cara mengatur instalasi g ++ 4.8 saya menjadi default g ++?

pengguna997112
sumber

Jawaban:

11

Pertama-tama, Anda harus menemukan di mana 4,8 binari Anda dari semua alat:

$ which gcc-4.8
/usr/bin/gcc-4.8
$ which g++-4.8
/usr/bin/g++-4.8
$ ls /usr/bin/*-4.8
/usr/bin/cpp-4.8         /usr/bin/x86_64-linux-gnu-cpp-4.8
/usr/bin/g++-4.8         /usr/bin/x86_64-linux-gnu-g++-4.8
/usr/bin/gcc-4.8         /usr/bin/x86_64-linux-gnu-gcc-4.8
/usr/bin/gcc-ar-4.8      /usr/bin/x86_64-linux-gnu-gcc-ar-4.8
/usr/bin/gcc-nm-4.8      /usr/bin/x86_64-linux-gnu-gcc-nm-4.8
/usr/bin/gcc-ranlib-4.8  /usr/bin/x86_64-linux-gnu-gcc-ranlib-4.8
/usr/bin/gcov-4.8

Jadi, kami memiliki semua binari kami, sekarang mari kita lihat apakah beberapa symlink tersedia untuk binari tersebut:

$ cd /usr/bin
$ ls -l gcc* cpp g++
lrwxrwxrwx 1 root root      7 sep 18 14:02 cpp -> cpp-4.7
lrwxrwxrwx 1 root root      7 abr 22  2013 g++ -> g++-4.7
lrwxrwxrwx 1 root root      7 sep 18 14:02 gcc -> gcc-4.7

Seperti yang dapat kita lihat, hanya cpp, g++dan gccmemiliki tautan simbolik. Kami memiliki dua opsi di sini.

Menghubungkan

Kami mengganti symlink dengan kami, menghapus yang sebenarnya lebih dulu:

sudo rm /usr/bin/cpp /usr/bin/gcc /usr/bin/g++

Lalu buat milik kita

sudo ln -s /usr/bin/cpp-4.8 /usr/bin/cpp
sudo ln -s /usr/bin/gcc-4.8 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.8 /usr/bin/g++

Untuk mengembalikannya kembali gunakan perintah yang sama tetapi dengan 4.7 atau 4.6 sebagai gantinya

sudo rm /usr/bin/cpp /usr/bin/gcc /usr/bin/g++
sudo ln -s /usr/bin/cpp-4.7 /usr/bin/cpp
sudo ln -s /usr/bin/gcc-4.7 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.7 /usr/bin/g++
Braiam
sumber
Ketika saya melakukannya: ls-l gcc * cpp g ++ itu dikembalikan: ls: tidak dapat mengakses gcc *: Tidak ada file atau direktori seperti itu ls: tidak dapat mengakses cpp: Tidak ada file atau direktori seperti ls: tidak dapat mengakses g ++: Tidak ada file atau direktori
user997112
Tidak diperlukan permintaan maaf :) Setelah saya memanggil fungsi hapus berfungsi, tetapi ketika saya pergi untuk membuat symlink "kami" dikatakan: sudo ln -s -T / usr / bin / cpp /usr/bin/cpp-4.8 ln: gagal membuat tautan simbolik `/usr/bin/cpp-4.8 ': File ada
user997112
(Saya memanggil perintah rm dua kali begitu pada kedua kalinya itu dikonfirmasi / mengeluh bahwa tautan yang ada sebenarnya dihapus)
user997112
3
Ini ide yang buruk . Ada banyak program yang digunakan gccuntuk mengkompilasi modul kernel dan beberapa di antaranya (misalnya Nvidia) akan crash secara diam-diam ketika gccmereka memanggil tidak akan menjadi salah satu yang dikompilasi dengan kernel.
nbubis
1
@ Mbubis juga, pertanyaannya adalah "Bagaimana cara mengatur instalasi g ++ 4.8 saya menjadi default g ++?", jadi, orang harus menganggap siapa pun yang melakukan ini, mereka tahu apa yang mereka lakukan, bukan? Di sisi lain, alternatif apa yang bisa Anda usulkan?
Braiam
16

Anda perlu memberi update-alternativestahu bahwa Anda memiliki 2 kompiler C ++, buat catatan untuk masing-masing, dan kemudian konfigurasikan yang mana yang ingin Anda gunakan. Ini dilakukan dengan yang berikut:

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6.3 60
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 40
sudo update-alternatives --config g++ 

Dari titik ini ke depan, satu-satunya hal yang diperlukan ketika berpindah kompiler adalah perintah ini:

sudo update-alternatives --config g++

Lihat man update-alternativesuntuk info lebih lanjut.

Sumber: Bagaimana cara menggunakan banyak instance gcc?

Radu Rădeanu
sumber
@Braiam Ini bisa dilakukan dengan cara yang sama dengan paket apa pun.
Radu Rădeanu
3
Bisakah seseorang menguraikan 60 dan 40? Saya pernah melihat ini di banyak tempat
user997112
@ user997112 Saya sarankan Anda untuk membaca pria itu, tetapi, jika Anda suka lebih dari 70 dan 30, gunakan 70 dan 30 ...
Radu Rădeanu
1
@ user997112 ini adalah nomor prioritas, dan hanya relevan ketika menggunakan --auto. Anda dapat melihat beberapa contoh menggunakanupdate-alternatives --display editor
Braiam
2
Pada 12,04 saya mendapatkan: update-alternatif: kesalahan: alternatif g ++ tidak bisa menjadi master: itu adalah budak dari gcc
rickfoosusa
9

Ini adalah deskripsi hebat dan petunjuk langkah demi langkah cara membuat dan mengelola alternatif master dan slave (gcc dan g ++).

Singkatnya, ini

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7 
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8 
sudo update-alternatives --config gcc
Anton K
sumber
Selamat Datang di Tanya Ubuntu! Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
Stormvirux
Kamu benar. Saya menambahkan bagian penting
Anton K
1
Menyelamatkan hari saya dengan barang-barang budak itu. tx
Lennart Rolland