Скачал g ++ 4.8 с PPA, но не могу установить его по умолчанию?


15

Я скачал g ++ 4.8 на Ubuntu 12.10, выполнив:

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

но когда я сделаю:

sudo update-alternatives --config g++

для переключения версий G ++ он говорит:

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

Однако если я сделаю:

g++ --version

это говорит:

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.

Как установить g ++ 4.8 для установки по умолчанию g ++?

Ответы:


11

Прежде всего, вы должны выяснить, где находятся ваши 4.8 двоичные файлы всех инструментов:

$ 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

Итак, у нас есть все наши двоичные файлы, теперь давайте посмотрим, доступны ли некоторые символические ссылки для таких двоичных файлов:

$ 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

Как мы можем видеть, только cpp, g++иgcc имеет символические ссылки. У нас есть два варианта здесь.

Создание символической ссылки

Мы заменяем символические ссылки нашими, сначала удаляя действительные:

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

Тогда создавая наши

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++

Чтобы вернуть его обратно, используйте те же команды, но с 4.7 или 4.6 вместо

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++

Когда я сделал: ls -l gcc * cpp g ++, он вернул: ls: не может получить доступ к gcc *: нет такого файла или каталога ls: нет доступа к cpp: нет такого файла или каталога ls: нет доступа к g ++: нет такого файла или каталога
user997112

Извинений не требуется :) Как только я вызываю функцию удаления, она работает, но когда я собираюсь создать "наши" символические ссылки, она говорит: sudo ln -s -T / usr / bin / cpp /usr/bin/cpp-4.8 ln: fail создать символическую ссылку `/usr/bin/cpp-4.8 ': файл существует
user997112

(Я дважды вызывал команду rm, поэтому во второй раз он подтвердил / пожаловался, что существующие ссылки были фактически удалены)
user997112

3
Это ужасная идея . Есть много программ, которые используют gccдля компиляции модулей ядра, и некоторые из них (например, Nvidia) будут молча аварийно завершать работу, когда gccих вызовы не будут теми, с которыми ядро ​​было скомпилировано.
nbubis

1
@nbubis хорошо, вопрос в том, «Как мне установить мою установку g ++ 4.8 как стандартную версию g ++?», поэтому следует предположить, кто бы это ни делал, они знают, что делают, нет? С другой стороны, какую альтернативу вы можете предложить?
Брайам

16

Вам нужно update-alternativesзнать, что у вас есть 2 компилятора C ++, создать запись для каждого из них, а затем настроить, какой из них вы хотите использовать. Это делается с помощью следующего:

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++ 

С этого момента, единственное, что требуется при переключении компиляторов, это команда:

sudo update-alternatives --config g++

Смотрите man update-alternativesдля получения дополнительной информации.

Источник: Как использовать несколько экземпляров GCC?


@Braiam Это можно сделать таким же образом с любым пакетом.
Раду Рэдяну

3
Может кто-нибудь уточнить на 60 и 40? Я видел это во многих местах
user997112

@ user997112 Я предлагаю вам прочитать этого человека, но, если вам нравится больше 70 и 30, то используйте 70 и 30 ...
Раду Рэдяну

1
@ user997112 это номера приоритетов, которые имеют значение только при использовании --auto. Вы можете увидеть некоторые примеры использованияupdate-alternatives --display editor
Braiam

2
12.04 я получаю: update-альтернативы: ошибка: альтернатива g ++ не может быть хозяином: это раб gcc
rickfoosusa

9

Это отличное описание и пошаговая инструкция по созданию и управлению альтернативами master и slave (gcc и g ++).

Короче, это

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

Добро пожаловать в Спросите Ubuntu! Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить сюда основные части ответа и предоставить ссылку для справки.
Stormvirux

Ты прав. Я добавил существенную часть
Антон К

1
Спас мой день с этим рабом. tx
Леннарт Роллан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.