Jadi saya telah menginstal gcc-4.4 dan gcc-4.3 (sama untuk g ++). Sejauh yang saya ingat ada alat di Ubuntu yang mengatur symlink untuk Anda jika Anda hanya mengatakannya versi yang Anda inginkan. Namun sepertinya itu tidak berfungsi di versi terbaru, yang menurut saya mengecewakan.
root@nexus:~# update-alternatives --config gcc
update-alternatives: error: no alternatives for gcc.
root@nexus:~# update-alternatives --config cc
There is only one alternative in link group cc: /usr/bin/gcc
Nothing to configure.
root@nexus:~# dpkg -l | grep gcc | awk '{print $2}'
gcc
gcc-4.3
gcc-4.3-base
gcc-4.3-multilib
gcc-4.4
gcc-4.4-base
gcc-4.4-multilib
gcc-4.5-base
gcc-multilib
lib32gcc1
libgcc1
Ada ide?
Jawaban:
Pertama menghapus pengaturan alternatif-pembaruan saat ini untuk gcc dan g ++:
Instal Paket
Tampaknya kedua gcc-4.3 dan gcc-4.4 diinstal setelah menginstal build-essential. Namun, kami dapat menginstal paket berikut secara eksplisit:
Instal Alternatif
Tautan simbolik cc dan c ++ diinstal secara default. Kami akan memasang tautan simbol untuk gcc dan g ++, lalu menghubungkan cc dan c ++ ke gcc dan g ++. (Perhatikan bahwa
10
,20
dan30
opsi adalah prioritas untuk setiap alternatif.)Konfigurasikan Alternatif
Langkah terakhir adalah mengkonfigurasi perintah default untuk gcc, g ++. Sangat mudah untuk beralih antara 4.3 dan 4.4 secara interaktif:
Atau beralih menggunakan skrip:
sumber
jalankan di terminal:
Oke, jadi bagian itu cukup sederhana. Bagian yang sulit adalah ketika Anda mengeluarkan perintah GCC itu sebenarnya adalah tautan simbolis ke versi GCC yang pernah Anda gunakan. Artinya, kita dapat membuat tautan simbolik dari GCC ke versi GCC mana pun yang kita inginkan.
sumber
Apakah ini benar-benar diinginkan? Ada perubahan ABI antara
gcc
versi. Mengkompilasi sesuatu dengan satu versi (mis. Seluruh sistem operasi) dan kemudian mengkompilasi sesuatu yang lain dengan versi lain, dapat menyebabkan konflik.Sebagai contoh, modul kernel harus selalu dikompilasi dengan versi yang sama
gcc
digunakan untuk mengkompilasi kernel. Dengan mengingat hal itu, jika Anda secara manual mengubah symlink antara/usr/bin/gcc
dan versi yang digunakan dalam versi Ubuntu Anda, modul-modul yang dibuat DKMS di masa depan mungkin menggunakangcc
versi yang salah .Jika Anda hanya ingin membangun sesuatu dengan versi yang berbeda
gcc
, itu cukup mudah, bahkan dengan skrip make. Misalnya, Anda bisa memasukkan versigcc
dalamCC
variabel lingkungan:Anda mungkin tidak memerlukannya di perintah make (konfigurasikan skrip biasanya menariknya) tetapi tidak sakit.
sumber
gcc
bukan bagian darialternatives
sistem dan mengapa ini tidak terlalu diinginkan. Jika tidak satu pun dari mereka akan berubah pikiran, lakukan saja secara manual.$ sudo apt-get install gcc-6 gcc-7 $ CC="gcc-7" ./configure <much output> $ make # uses gcc-7
Padahalsudo update-alternatives gcc gcc-7
akan memastikan bahwa Anda tidak sengaja mengganti ABI.Sunting:
Ini mengasumsikan bahwa Anda telah menginstal versi pertama, dengan misalnya:
Asli:
Dan di sini adalah satu-liner untuk mereka yang malas, cukup ubah ganti nomor di akhir ke versi yang Anda inginkan. Ini akan membuat perubahan untuk gcc dan / atau g ++
Dalam contoh ini saya beralih ke 4.9
Tidak ada pemeriksaan kesalahan dan apa yang tidak ada dalam contoh ini, jadi Anda mungkin ingin memeriksa apa yang akan dijalankan sebelum Anda menjalankannya. Cukup tambahkan gema sebelum sudo . Untuk kelengkapan saya sediakan juga baris cek:
Output dari cek harus berupa:
Anda dapat memeriksa versi setelahnya dengan:
Penjelasan semi-detail:
sumber
Bagaimana dengan tautan simbolis di direktori sementara:
mkdir x && PATH=$PWD/x:$PATH && ln -s /usr/bin/g++-7 $PWD/x/g++
sumber