Почему apt-get установил Virtual Box вместо g ++?

Это больше не работает, если это когда-либо было:

host all all * md5

Для этого возможны следующие возможные строки:

[d2 ] host all all * md5

host all all :: 0/0 md5 # ipv6 range host all all all md5 #all ip

host all all 0.0.0.0/0 md5 # ipv4 range [ ! d5]

1
задан 2 August 2016 в 16:28

2 ответа

Правильная команда для установки g++ version 5.x:

sudo apt-get install g++-5

Это установит g++ версию 5.3 на xenial, которая является текущим значением по умолчанию (поэтому apt-get install g++ устанавливает это также, но это изменится в будущем). На самом деле, нет публичной версии 5.0 GCC. Другие релизы g++ упаковываются, например. g++-4.9 или g++-6, которые могут быть установлены таким же образом.

Если вам когда-либо понадобится установить конкретную (существующую) версию g++, которая не упакована для вашей системы, не будет публичного выпуска 5.0 .

8
ответ дан 23 May 2018 в 07:36
  • 1
    Это хорошая точка; sudo apt install g++5.0 (без пробела между g++ и 5.0) все равно не удалось. – edwinksl 1 August 2016 в 14:06

Давайте сломаем это.

Прежде всего, несколько заметок о том, как apt-get install (и большинство других apt-get аргументов тоже):

Вы можете ввести несколько пакетов имена:
sudo apt-get install foobar spamegg 
Имена пакетов на самом деле являются расширенными регулярными выражениями (ERE) (проверьте man 7 regex), поэтому имя пакета foo.bar означает любое имя пакета, которое имеет подстроку, которая начинается с foo и заканчивается на bar с любым символом между foo и bar. Вероятно, f.*r означает любое имя пакета, которое содержит подстроку, которая имеет f и r с любым количеством символов, т.е. между ними. Чтобы выполнить полное сопоставление имени пакета, используйте токены начала и конца, например. [F19]. Если вы хотите, чтобы любой токен Regex обрабатывался буквально, вам нужно избежать маркера с помощью \, например. для обработки foo.bar в буквальном смысле вам нужно:
sudo apt-get install 'foo\.bar'
Здесь одиночное цитирование состоит в том, чтобы предотвратить интерпретацию оболочки шаблона в виде шаблона глобуса, не обязательно в этом случае, но потребуется, например. для шаблона foo.*bar, если у вас есть файл в текущем каталоге с именем, например. [F23]. При рассмотрении вопроса о пакете есть улов. Если есть какой-либо пакет, соответствующий шаблону, шаблон будет обрабатываться буквально, и интерпретация Regex не будет выполнена. Например, для шаблона пакета g++ он будет соответствовать пакету g++ буквально независимо от токена Regex +. Если в определенных репозиториях не было пакета с именем g++, он будет рассматриваться как шаблон ERE.

Теперь вы дали команду:

sudo apt-get install g++ 5.0

Это означает:

Вы можете ввести несколько имен пакетов:
sudo apt-get install foobar spamegg 

Вы можете ввести несколько имен пакетов:

Имена пакетов на самом деле являются шаблонами Extended Regular Expression (ERE) (Проверить man 7 regex), поэтому имя пакета foo.bar означает любое имя пакета, которое имеет подстрока, начинающаяся с foo и заканчивающаяся bar любым символом между foo и bar. Вероятно, f.*r означает любое имя пакета, которое содержит подстроку, которая имеет f и r с любым количеством символов, т.е. между ними. Чтобы выполнить полное сопоставление имени пакета, используйте токены начала и конца, например. [F19]. Если вы хотите, чтобы любой токен Regex обрабатывался буквально, вам нужно избежать маркера с помощью \, например. для обработки foo.bar в буквальном смысле вам нужно:
sudo apt-get install 'foo\.bar'
Здесь одиночное цитирование состоит в том, чтобы предотвратить интерпретацию оболочки шаблона в виде шаблона глобуса, не обязательно в этом случае, но потребуется, например. для шаблона foo.*bar, если у вас есть файл в текущем каталоге с именем, например. foo.bar.

g++ соответствует литеральному мета-пакету g++, как указано выше

sudo apt-get install g++-5

Предположительно, вы хотите установить версию g++ [ f37], поэтому сделало бы следующее (уже упомянутое в этом ответе); Мета-пакет g++-5 будет ссылаться на последний доступный небольшой выпущенный пакет g++ версии 5:

apt-cache search 'g\+\+-[0-9]+'

Для поиска любых пакетов в настроенных репозиториях используйте apt-cache (использует ERE, например apt-get):

apt-cache search g++ | less

Если вы не хотите использовать Regex-ify, используйте less для прокрутки вниз по более крупному списку:

sudo apt-get install --dry-run foobar
4
ответ дан 23 May 2018 в 07:36
  • 1
    +1 Самый полный и организованный ответ. Пытаться к буквальным совпадениям, прежде чем вернуться на RE; использование расширенного RE (в отличие от простых RE); способность apt-cache search важна для понимания. – arielf 5 August 2016 в 20:22

Другие вопросы по тегам:

Похожие вопросы: